我有一些调用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。服务器上没有防火墙。我从来没有必要配置该服务器以允许从其他任何地方访问它。
答案 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)
答案 2 :(得分:0)
好吧,我认为任何人都无法帮助我解决这个问题。这是它的原因:发送请求的服务器storagews最初是从接收请求的服务器克服的。因此,在storagews的etc / hosts文件中,主机名“sws”正在解析为localhost。所以它试图将请求发送给自己。 raj_nt的评论引起了我的注意。如果你想回答,我会给你赏金。
感谢大家的尝试!
答案 3 :(得分:0)
签出simplexml_load_file发送的请求。
您也可以尝试直接在浏览器中访问“url”(假设您正在执行GET请求)
您还需要考虑服务器端。即使一切正常,您的服务器也可能会抛出400代码的响应。它也可能没有编程接受您发送的请求。
答案 4 :(得分:-1)
我认为该文件直接加载到您的浏览器。检查CURL并将用户代理欺骗为您的浏览器中的一个。另请尝试启用Cookie功能。