PHP Curl GET请求与浏览器中的返回不一样

时间:2017-04-27 13:52:38

标签: curl php-5.6

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

这是我的卷曲请求。

$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。

部分返回的数据是一个应具有此查询字符串的网址:

?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

1 个答案:

答案 0 :(得分:0)

您需要使用curl请求添加浏览器的用户代理字符串(如果您认为它适用于浏览器)。您可以通过以下任一方式执行此操作:

func_dict[command]()

或者,

def test():
    print('Test is successfull')

def help():
    pass

func_dict = {'test':test,'help':help} # In this case the 1st is the input, 2nd output
command = input('> ')
func_dict[command]()

可能是拼写错误,我可以在您设置http-header的代码中看到额外的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");