cURL 400严重要求

时间:2015-09-05 18:24:16

标签: php curl

Windows NT DEV01 6.2 build 9200(未知Windows版标准版)i586 PHP版本5.4.24 allow_url_fopen =开启

我使用的网址如下:

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块。但是,通过cURL,我收到“HTTP错误400.请求形成错误。”

如果我将网址更改为

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

(注意问号前面的正斜杠)我也一样。

如果我将网址更改为

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

对参数使用urlencode(),请求有效,但远程系统出错。

file_get_contents返回“false”。

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

1 个答案:

答案 0 :(得分: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);