【问题标题】:PHP Curl GET request not returning same as in browserPHP Curl GET 请求返回的结果与浏览器中的不同
【发布时间】:2017-09-25 08:57:01
【问题描述】:

使用 PHP curl 获取与在浏览器中使用相同 url 时相同的数据时遇到问题。

这是我的 curl 请求。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic " . $authString));
$data = curl_exec($ch);

由于需要授权,我无法使用 file_get_contents。

部分返回的数据是一个应该有这个查询字符串的url:

?q=StatusDate%20%3C%20 ... &fields= ...

解码的是哪个

?q=StatusDate <  ... &fields= ...

这就是我在使用浏览器时得到的。但是当我使用 PHP 和 Curl 时,我只得到这个:

?q=StatusDate&fields= ...

%20%3C%20 ... 不见了。

我猜我需要另一个 curlopt 设置,但看不到任何明显的东西。返回的数据是json格式,使用json_decode没有区别。

我已经尝试过CURLOPT_BINARYTRANSFER,根据手册,我的 PHP 版本忽略了它,但没有任何区别。

请帮帮我。

我使用的是 php 5.6.30

【问题讨论】:

    标签: curl php-5.6


    【解决方案1】:

    您需要在 curl 请求中添加浏览器的用户代理字符串(如果您认为它适用于浏览器)。您可以通过以下任何一种方式做到这一点:

    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12");
    

    或者,

    curl_setopt($ch, CURLOPT_HTTPHEADER,
        array("Authorization: Basic " . $authString,
        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12')
    );
    

    可能是一个错字,我可以在您设置 http-header 的代码中看到一个额外的)

    【讨论】:

    • 它适用于 Firefox、Chrome 和 IE。我会指定什么用户代理?错字只是我错误地复制粘贴到该网站 - 现在已修复。
    • 它应该适用于任何用户代理。看看哪一个有效(如果)。
    • 我最终放弃了这一点,并以完全不同的方式处理它,因为没有任何效果。无论如何,谢谢Sabuj。
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多