【问题标题】:HTTP headers sent by PHPPHP 发送的 HTTP 标头
【发布时间】:2015-01-10 13:29:08
【问题描述】:

我正在使用 CURL 和 file_get_contents 来找出服务器请求页面和浏览器请求(有机)之间的基本区别。

我在两种方式都请求一个 PHPINFO 页面,发现它在不同的情况下给出不同的输出。

例如,当我使用浏览器时,PHPINFO 会显示: _SERVER["HTTP_CACHE_CONTROL"] 无缓存 当我通过 PHP 请求同一页面时,此信息丢失。

我的卷曲:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://www.example.com/phpinfo.php");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0");
    curl_setopt($ch, CURLOPT_INTERFACE, $testIP);
    $output = curl_exec($ch);
    curl_close($ch);

我的文件获取内容:

$opts = array(
'socket' => array('bindto' => 'xxx.xx.xx.xx:0'),
'method'  => 'GET',
'user_agent '  => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0", // this doesn't work
'header' => array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8')
);

我的目标: 使 PHP 请求看起来与浏览器请求相同。

【问题讨论】:

  • 为什么您希望您的请求看起来像浏览器请求?
  • @Halcyon 这是为了防止服务器以不同于常规浏览器请求的方式处理我的请求。
  • 好吧,假装我问你'为什么?' 5 次,然后决定这是否是你真正想要做的。
  • @Halcyon 我需要帮助来完成这个项目。项目完成后我会问老板“为什么”。
  • 问题是没有好的解决方案。没有一个好的解决方案的原因是你不应该这样做。如果您正在编写爬虫,人们会想知道您正在爬取他们的网站。说自己不是某人或某物是骗人的。

标签: php curl header file-get-contents


【解决方案1】:

服务器检测您的一种可能方法是检查您的 cookie 是 php 代码而不是浏览器。使用 php curl 向服务器请求一次,然后将获得的 cookie 注入到下一个请求中。 在这里检查: http://docstore.mik.ua/orelly/webprog/pcook/ch11_04.htm 服务器可以理解您是机器人(php 代码)的另一种方式是检查referer http 标头。 你可以在这里了解更多: http://en.wikipedia.org/wiki/HTTP_referer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2021-10-21
    • 2012-01-09
    相关资源
    最近更新 更多