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”,如果可能的话我不想这样做,但我不知所措。
答案 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);