2013-06-11 30 views
1

我有一些调用Web服务的PHP代码。我的本地机器上运行时,它完美地工作,但是当我尝试到远程服务器(它最终将驻留),我收到以下错误上运行它:PHP:Http请求从远程服务器失败

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。

任何想法可能会导致这种不同的行为?我需要在服务器上安装另一个软件包吗?

UPDATE:

虽然把URL在浏览器中正常工作,当我试图给wget从Linux服务器的URL,我得到的400错误。服务器URL访问也是debian linux。服务器上没有防火墙。我从来没有必要配置该服务器以允许从其他地方访问它。

+1

'file_get_content( “HTTP:// XXXXXXXXX:8080/symws/REST /标准/ searchCatalog clientID的= StorageClient&字词1 = ocm00576702”)'你怎么弄? – Baba

+0

你是否检查在运行脚本的机器上的php.ini中是否设置了allow_url_fopen? – quidage

+0

file_get_content给出了相同的错误。 –

回答

0

嗯,我不认为任何人将是能够帮助我这一个。原来是这样的:发送请求的服务器storagews最初是从接收请求的服务器克隆的。因此,在storagews的etc/hosts文件中,主机名“sws”解析为localhost。所以它试图将请求发送给自己。这是raj_nt的评论,这引起我对此的评论。如果你想回答,我会给你赏金。

感谢您尝试每个人!

0

我的猜测是你的URL格式不正确。

以下是400码means

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

+0

我的网址出现在错误讯息中。它出什么问题了? –

+0

为什么会从我的本地机器上运行相同的URL?它会不会自动地改造它? –

+0

是不是XXXXXXXXX格式不正确,或者服务器配置不正确,无法响应来自服务器的XXXXXXXXX请求? –

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; 
} 
?> 

UPDATE:

试试这个,请看看你得到一些信息回:

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

后续代码var_dump给“布尔(假)” –

+0

的任何错误的事情仍然会导致错误。 –

+0

Scratch that ... var_dump实际上给出:string(0)“” –

-1

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

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

+0

该网址在浏览器中正常工作。这不是问题。 –

+0

你有没有试过像curl中显示你在链接中传递用户代理? – Mateusz

0

检出正在由simplexml_load_file发送的请求。

,你也可以尝试访问直接“网址”在浏览器中(假设您正在执行一个GET请求)

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

相关问题