【问题标题】:file_get_contents - blank response (PHPSESSID)file_get_contents - 空白响应 (PHPSESSID)
【发布时间】:2014-10-10 22:03:41
【问题描述】:

我正在尝试下载一些带有 php 代码的网页。

$context_params = array('http' => array('method' => 'GET',
'user_agent' => 'Mozilla/5.0', 
'timeout' => 1, 
'header' => "Accept-language: en".
"Cookie:       site=blabla1234567cookie; 
               __cf=cookie12345678; 
          PHPSESSID=phpsessidcookie;"));

$context = stream_context_create($context_params);
$html = file_get_contents($url, FALSE, $context);

Web 服务器通过验证 cookie 来检查用户。我已经在上下文中插入了正确的客户端 cookie,但是,只要 PHPSESSID 过期(~1 小时?),file_get_contents 就会返回空白页。我试图在网络浏览器上删除 PHPSESSID cookie,一旦我加载网页,它就会生成新的 PHPSESSID cookie。它不需要任何重新登录。然后我尝试删除脚本上的 PHPSESSID cookie,但现在 file_get_contents 返回空白页。

我试图检查this thread,但无论如何都没有帮助。它仍然返回空白页,一旦我在脚本中插入 session_id() 和 session_name(),我就无法使用 print_r()/var_dump/echo 打印上下文数组。 (太大了?)
session_write_close() 没有区别。
如果我删除所有 cookie,那么它会毫无问题地加载页面,但我没有登录。
我尝试使用 var_dump/echo 读取空白页面的响应,它们都在 file_get_contents 之后在 $http_response_header 上返回 BLANK。

理论上,PHPSESSID 可以由远程服务器生成并根据他的 cookie 和 IP 地址发送给客户端(这解释了为什么它在我的机器上工作,但在我的 VPS 上不起作用)。 但是 PHPSESSID 不应该在客户端机器上生成独立于你自己的 IP 地址吗?

问题:如何自动为 PHP 脚本的上下文生成/设置/更新新的正确 PHPSESSID?

编辑:我想使用 file_get_contents。 对 cURL 解决方案完全不感兴趣。

【问题讨论】:

  • 哦亲爱的远程站点不想让你窃取他们的内容,太伤心了。

标签: php cookies web-scraping


【解决方案1】:

找到解决方案。

解决方案:在每个 cookie 的末尾添加 \r\n。否则会破坏结构,远程服务器会抱怨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多