然而,当我使用PHP cURL发出此请求时,请求失败并返回类似于此的响应:
Failed to Connect, fopen(http://10.0.0.8:8080/posts?foo=bar&bar=baz): failed to open stream: HTTP request failed!
Web服务似乎是使用PHP编写的,端点是http://foo.com/service.php。
Postman将100%的时间工作,Bash提出的cURL请求100%的时间。
对我而言,它正在尝试解析内部IP地址并且只在使用php cURL库时才会失败,这是非常奇怪的。
希望有人能够对此有所了解或者之前已经经历过这种情况。我已经尝试了几乎所有可以想象的卷曲选项,但是没有运气。任何帮助将不胜感激。
代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::SERVICE_ENDPOINT);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $paramString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
var_dump(curl_exec($ch));
die;
详细输出:
HTTP/1.1 200 OK
Date: Tue, 06 Jan 2015 09:27:20 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified: Tue, 06 Jan 2015 09:27:20 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 324
Content-Type: text/html
Failed to Connect, fopen(http://10.0.0.8:8080/posts?foo=bar&bar=baz): failed to open stream: HTTP request failed!
答案 0 :(得分:2)
curl命令正常,但远程服务器上的代码尝试使用fopen
下载某个文件。失败并且错误消息作为对您的调用代码的响应的一部分返回。看起来远程代码试图根据从客户端收到的某些输入打开URL; curl命令的输入与Postman的输入不同。要确切了解HTTP标头或POST内容中的哪个元素是罪魁祸首,您需要查看远程服务器代码(service.php
)或通过比较邮递员的确切内容来进行反复试验请求与CURL请求。