1

我有一些调用 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。服务器上没有防火墙。我从来不需要配置该服务器以允许从其他任何地方访问它。

4

5 回答 5

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);
?>
于 2013-06-14T06:56:21.473 回答
0

My guess is that your URL is malformed.

Here's what the 400 code means.

"The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications."

于 2013-06-11T14:44:00.180 回答
0

好吧,我认为没有人能够帮助我解决这个问题。它是这样的:发送请求的服务器 storagews 最初是从接收请求的服务器 sws 克隆而来的。因此,在 storagews 的 etc/hosts 文件中,主机名“sws”解析为 localhost。所以它试图将请求发送给它自己。是 raj_nt 的评论让我知道了这一点。如果你想回答,我会给你赏金。

感谢大家尝试!

于 2013-06-17T13:54:44.380 回答
0

检查 simplexml_load_file 发送的请求。

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

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

于 2013-06-20T01:57:16.973 回答
-1

我假设该文件直接加载到您的浏览器。使用 CURL 检查并从您的浏览器欺骗用户代理。也尝试启用 cookie 功能。

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

于 2013-06-14T12:18:35.997 回答