Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php文件\u获取\u内容未捕获特定组cookie_Php_Cookies_Login_Screen Scraping_File Get Contents - Fatal编程技术网

Php文件\u获取\u内容未捕获特定组cookie

Php文件\u获取\u内容未捕获特定组cookie,php,cookies,login,screen-scraping,file-get-contents,Php,Cookies,Login,Screen Scraping,File Get Contents,我创建了一个脚本,可以自动下载由应用程序创建的文件,该应用程序在生成文件时向用户发送电子邮件通知。此脚本登录,然后第二次执行,并在主机站点上设置了一些会话项,可以下载文件 最近,宿主站点创建了一个更新,并进行了一些额外的验证,因为我的脚本一直无法工作。我已经实现了与更新的验证过程相关的一切,以确保XSS攻击基本上得到缓解,但我遇到了一个障碍,现在一组GUID值不再位于“set Cookie:”中 我首先进入登录页面,获取该尝试的唯一值 $url = "https://loginurl.com/"

我创建了一个脚本,可以自动下载由应用程序创建的文件,该应用程序在生成文件时向用户发送电子邮件通知。此脚本登录,然后第二次执行,并在主机站点上设置了一些会话项,可以下载文件

最近,宿主站点创建了一个更新,并进行了一些额外的验证,因为我的脚本一直无法工作。我已经实现了与更新的验证过程相关的一切,以确保XSS攻击基本上得到缓解,但我遇到了一个障碍,现在一组GUID值不再位于“set Cookie:”中

我首先进入登录页面,获取该尝试的唯一值

$url = "https://loginurl.com/";

$options = array(
    'https' => array(
        'header' => "",
        'method' => 'GET',
        'content' => "",
    ),
);
$post_context = stream_context_create($options);

$post_raw_result = file_get_contents($url, false, $post_context);

$unique_headers = $http_response_header;
我分配http_response_头,然后选择一些我需要的值,但它不包含我在浏览器中看到的所有cookie

在过去的几周里,我一直在使用curl,从shell_exec()执行curl,而file_get似乎是我最好的选择,但我不知道为什么我不能再看到这些GUID项了。。在检查通信时,我可以在chrome或Mozilla中看到它们。我想可能是有多个cookie的东西,并尝试了以下几项:

$cookies_array = array();
foreach($http_response_header as $s)
{
  if (preg_match('|^Set-Cookie:\s*([^=]+)=([^;]+);(.+)$|', $s, $parts))
  {
    $cookies_array[] = $parts[1] . '=' . $parts[2];
  }
}
在其他一些类似问题的线程中找到和,但这似乎没有捕获任何其他信息

我很幸运地通过检查$\u COOKIE找到了更多的数据,但仍然没有包含我需要的2个GUID值

我甚至搬到了邮递员那里,可以看到在那里定义的cookies,我似乎无法用php捕获。你知道为什么它们不会出现在http\u头\u响应中,或者在哪里可以找到它们吗

可能是第一条评论:

请注意,HTTP包装器的头行硬限制为1024个字符。 接收到的任何长于此长度的HTTP头都将被忽略,并且不会出现在$HTTP\u response\u头中

如果不是,我建议使用CURL

$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, 1); // This is what you looking for
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);

// Your other options - see http://php.net/manual/en/function.curl-setopt.php

$response = curl_exec($curl);

// Check for $response success
$header = substr($response, 0, curl_getinfo($curl, CURLINFO_HEADER_SIZE)); // There you will get headers

或者你可以从头痛中得到一些东西,比如痛风,它可以为你处理饼干。

要解决这个问题,需要结合几个项目。 1.移动到卷曲 2.删除内容长度(这导致每次设置时重定向到超时) 3.发出第二个请求并存储cookie,并呈现所有存储的cookie

必须使用以下所有选项

    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "",
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_COOKIEJAR => 'cookie.txt',
    CURLOPT_COOKIEFILE => 'cookie.txt',
    CURLOPT_SSL_VERIFYPEER => false,

感谢您的回复,再次制作卷发版本,看看我是否能让它工作,并检查痛风