PHP CURL GET请求返回500,bash CURL成功


PHP CURL GET request returns 500 where bash curl succeeds

我正在尝试使用PHP的CURL向服务器发出GET请求,并且这样做有一些困难。当我通过PHP发出请求时,我从外部服务器返回了一个500错误。但是,如果我使用bash curl发出请求,或者在浏览器中访问URL,它就会成功。

我已经把PHP精简到最基本的部分:

$url = 'http://example.com:8080/path/to/service?cmd=my_command&arg=example2.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
print_r(curl_getinfo($ch));
curl_close($ch);

如上所述,从example.com返回一个500错误。但是,如果我执行以下操作:

[me@host ~] curl "http://example.com:8080/path/to/service?cmd=my_command&arg=example2.com"

返回预期的XML文档。

给了什么?它必须与URL的编码有关,就像我将$url变量剥离到http://example.com:8080, PHP CURL请求现在响应200。我尝试用%26替换& -这不起作用(我也不希望它起作用,因为&在那里的URL中是有效的)。我试过做php curl发送vars使用GET奇怪的结果建议的答案,但这也没有帮助。

我在这里错过了什么?我敢肯定这是一件极其简单的事情,但我就是想不起来。

谢谢!

编辑:我刚刚尝试在Python中这样做-只是为了看看发生了什么-它在那里工作得很好:

import urllib2
r = urllib2.urlopen(theURL)
r.read()

事实证明,我访问的API需要一个User-Agent来处理所有请求,但没有提供任何信息来表示这一点。

这是一个常见的事情吗?除了http://developer.github.com/v3/#user-agent-required

,我找不到任何其他人这样做的例子。

我可以通过添加

使事情正常工作
curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Some-Agent/1.0");