2015-09-05 91 views
-1

的Windows NT 6.2 DEV01构建9200(未知的Windows版本标准版)i586的 PHP版本5.4.24 了allow_url_fopen =在卷曲400形成严重要求

的URL我用这样的容貌:

http://www.warrantycompany.com/services/rate.asmx/GetRates?AccountNumber=37920N&DRFC=0&Mileage=52000&VIN=1G2ZA5EK3A4163364&ManufacturerWarranty=y&BrandedOrSalvaged=branded&EngineCC=0 

及相关PHP代码如下所示:

$curlSession = curl_init(); 
curl_setopt($curlSession, CURLOPT_TIMEOUT , 30); 

curl_setopt($curlSession, CURLOPT_HTTPGET, 1); 
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curlSession, CURLOPT_URL, $url); 

$sTemp = curl_exec($curlSession); 

echo curl_errno($curlSession); 
echo curl_error($curlSession); 

直接加载到浏览器中,我得到XML的长块与INF我想要的信息。然而,通过cURL,我得到“HTTP错误400.请求形成严重。”

如果我更改URL阅读

http://www.warrantycompany.com/services/rate.asmx/GetRates/?AccountNumber=... 

(注意问号之前的斜线),我会得到相同的。

如果我使用的参数进行urlencode()将URL改为

http://www.warrantycompany.com/services/rate.asmx/GetRates?AccountNumber%3D37920N%26DRFC%3D0%26... 

,请求工作,但在远程系统出现了错误。

file_get_contents返回“false”。

这个工作的唯一方法 - 迄今为止工作 - 是使用服务器对象“MSXML2.ServerXMLHTTP”,如果可能,我不想这样做,但我很茫然。

+0

当我到浏览器复制URL,我得到一个错误消息和404也许你应该先检查一下服务器应用程序到底是接受试图乱动前未知参数等。这看起来像一个API,应该有某种文档。 –

+0

是的,你会得到一个404错误:我的例子中的网址使用了一个虚假的域名,因为这是我工作的代码。正如我在文中所说,直接加载到浏览器中,我使用的URL(实际的URL)工作得很好;我用XML获得所需的信息。 –

回答

0

试试这个..

//put your parameters in a array with key/value like this 
$arr = array('AccountNumber' => 37920, 'DRFC' => 0,......); 

//set the base url of the service 
$url = 'http://www.warrantycompany.com/services/rate.asmx'; 

$uri = http_build_query($arr, '', '&'); 
$uri = str_replace (array('+',' '), '%20', $uri); 
$url = sprintf("%s?%s", $url, $uri); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_TIMEOUT , 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
$sTemp = curl_exec($ch); 

echo curl_errno($ch); 
echo curl_error($ch); 
curl_close ($ch); 


//you can handle the respond like this 
list($header, $body) = explode("\r\n\r\n", $respond, 2); 
+0

不幸的是,这个例子省略了URL的关键部分,无论如何,是的,我已经用编码尝试过了,正如你在原始描述中看到的那样。 –