【问题标题】:php cURL request using modified headers使用修改后的标头的 php cURL 请求
【发布时间】:2014-03-03 15:45:05
【问题描述】:

我想在我的 php 文件中捕获站点 (http://gnocchi-www.buffalo-ggn.net/bingo2-v2.47.0-JACKET/js/cache/static_desktop_data.json) 的响应,以将可用的集合项写入数据库。

如果我在浏览器中输入地址,我会得到一个 json 字符串作为响应。但如果我使用 cURL 请求,我会得到一个空响应。

这是我的 curl 代码:

$url = 'http://gnocchi-www.buffalo-ggn.net/bingo2-v2.47.0-JACKET/js/cache/static_desktop_data.json';
$headers = array( 
        "Content-Type: application/x-www-form-urlencoded", 
        "Host: gnocchi-www.buffalo-ggn.net", 
        "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4", 
        "Accept-Encoding: gzip,deflate,sdch", 
        "Accept: */*"
    ); 

$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_GET, true);
curl_setopt( $ch, CURLOPT_HEADER, true);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36");
curl_setopt( $ch, CURLOPT_REFERER, "https://gs1.wac.edgecastcdn.net/805F48/gnocchi/bingo2-v2.47.0-JACKET/assets/Game.swf");
curl_setopt( $ch, CURLOPT_VERBOSE, true);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
$response=curl_exec( $ch );
echo $response;

当我在浏览器中输入网址时发送的标题是:

主机:gnocchi-www.buffalo-ggn.net

连接:保持活动

接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/32.0.1700.107 Safari/537.36

接受编码:gzip、deflate、sdch

接受语言:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

谁能帮我解决这个问题???

【问题讨论】:

  • 确切的代码对我有用——我得到了大量的 JSON 数据(根据返回的 Content-Length 标头,578604 字节)。不过,您的代码会收到一些警告 - 尝试打开 error_reporting(E_ALL); 以查看您是否从中获得了一些有用的信息。
  • CURLOPT_GET 选项不存在 (php.net/manual/en/function.curl-setopt.php)
  • 谢谢尼尔斯和最后。在我的另一台服务器上它工作正常。不太明白,但它在那里工作。谢谢你的帮助。也许我以前应该在那里尝试过。

标签: php curl


【解决方案1】:

从您的代码中删除它:

"Accept-Encoding: gzip,deflate,sdch",

如果您真的想发送任何编码请求,请在您的代码中添加此 curl 选项。

curl_setopt( $ch, CURLOPT_ENCODING, "");

最后,这个对现代版本的 libcurl 没有任何影响。所以删除这个。

curl_setopt( $ch, CURLOPT_GET, true);

【讨论】:

  • 谢谢萨布杰。我将它们都删除了,它在我的其他主机上就像一个魅力。
猜你喜欢
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2018-04-24
  • 2011-04-27
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多