我正在尝试使用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做这件事 - 只是为了看看发生了什么 - 它在那里工作正常:&
答案 0 :(得分:3)
事实证明,我访问的API需要一个User-Agent来处理所有请求,但没有提供任何信息来表明这一点。
这是常见的事吗?除了http://developer.github.com/v3/#user-agent-required
之外,我找不到任何其他人做这个的其他例子我能够通过添加
让事情变得更好curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Some-Agent/1.0");