PHP:Http请求从远程服务器失败

时间:2013-06-11 14:40:11

标签: php linux macos web-services debian

我有一些调用Web服务的PHP代码。它在我的本地机器上运行时效果很好,但是当我尝试在远程服务器上运行它(它最终将驻留在那里)时,我收到以下错误:

Warning: simplexml_load_file(http://XXXXXXXXX:8080/symws/rest/standard/searchCatalog?clientID=StorageClient&term1=ocm00576702): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
 in /var/www/ShoppingCart/storage_request_button.php on line 42

我的本​​地计算机正在运行OSX;服务器正在运行debian linux。

知道可能导致这种不同行为的原因是什么?我需要在服务器上安装另一个软件包吗?

更新:

虽然将URL放在浏览器中工作正常,但当我尝试从linux服务器中获取URL时,我收到400错误。服务器URL访问也是debian linux。服务器上没有防火墙。我从来没有必要配置该服务器以允许从其他任何地方访问它。

5 个答案:

答案 0 :(得分:1)

您可以尝试压制错误,因为this question提到摆脱状态= 400.也许是simplexml_load_file('url', null, LIBXML_NOERROR);

如果它仍然不起作用,有很多事情可能会出错。 simplexml_load_file没有很多选项可供调试。您可以尝试使用curl

<?php
// make request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://XXXXXXXXX:8080/symws/rest/standard/searchCatalog?clientID=StorageClient&term1=ocm00576702"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch);   

// handle error; error output
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
  var_dump($output);
} else {

  //load xml
  $xml= simplexml_load_string($output);
}
curl_close($ch);

if (empty($xml)) {
  echo 'Something went wrong';
  exit;
}
?>

更新:

请试一试,看看你是否收到了一些信息:

<?php
$content = file_get_contents('http://XXXXXXXXX:8080/symws/rest/standard/searchCatalog?clientID=StorageClient&term1=ocm00576702');
var_dump($http_response_header);
?>

答案 1 :(得分:0)

我的猜测是您的网址格式不正确。

以下是400代码means

“由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。”

答案 2 :(得分:0)

好吧,我认为任何人都无法帮助我解决这个问题。这是它的原因:发送请求的服务器storagews最初是从接收请求的服务器克服的。因此,在storagews的etc / hosts文件中,主机名“sws”正在解析为localhost。所以它试图将请求发送给自己。 raj_nt的评论引起了我的注意。如果你想回答,我会给你赏金。

感谢大家的尝试!

答案 3 :(得分:0)

签出simplexml_load_file发送的请求。

您也可以尝试直接在浏览器中访问“url”(假设您正在执行GET请求)

您还需要考虑服务器端。即使一切正常,您的服务器也可能会抛出400代码的响应。它也可能没有编程接受您发送的请求。

答案 4 :(得分:-1)

我认为该文件直接加载到您的浏览器。检查CURL并将用户代理欺骗为您的浏览器中的一个。另请尝试启用Cookie功能。

这里有一些例子:http://www.electrictoolbox.com/php-curl-user-agent/

相关问题