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

时间:2013-05-23 15:25:01

标签: php curl get

我正在尝试使用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 var剥离到仅http://example.com:8080一样,PHP CURL请求现在以200响应。我已经尝试替换{{1}使用& - 这不起作用(我也不期望它,因为%26在URL中有效)。我已经尝试过做php curl sending vars using GET wierd results建议的答案,但这也无济于事。

我在这里缺少什么?我确信这是荒谬的简单,但它正在逃避我。

谢谢!

编辑:我刚刚尝试用Python做这件事 - 只是为了看看发生了什么 - 它在那里工作正常:

&

1 个答案:

答案 0 :(得分:3)

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

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

之外,我找不到任何其他人做这个的其他例子

我能够通过添加

让事情变得更好
curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Some-Agent/1.0");