2

我正在尝试使用 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 的编码有关,就好像我将$urlvar剥离http://example.com:8080为 PHP CURL 请求现在以 200 响应。我尝试用 - 替换&%26不起作用(我也不希望它,&在 URL 中有效)。我已经尝试过使用 GET wierd results 建议 php curl 发送 vars的答案,但这也无济于事。

我在这里想念什么?我敢肯定这是一件简单得离谱的事情,但它正在逃避我。

谢谢!

编辑:我刚刚尝试在 Python 中执行此操作 - 只是为了看看发生了什么 - 它在那里工作正常:

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

1 回答 1

3

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

这是普遍现象吗?除了http://developer.github.com/v3/#user-agent-required之外,我找不到任何其他人这样做的例子

通过添加,我能够让事情正常工作

curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent: Some-Agent/1.0");
于 2013-05-30T17:03:56.750 回答