2015-09-05 3 views
-1

Windows NT DEV01 6.2 сборка 9200 (версия Unknown Windows Standard Edition) i586 PHP Version 5.4.24 allow_url_fopen = OnCurl 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 с инф я хочу. Однако через cURL я получаю «HTTP Error 400». Запрос плохо сформирован ».

Если изменить URL, чтобы читать

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

(обратите внимание на слэш перед знаком вопроса) я получаю то же самое.

Если изменить URL-адрес для

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

использованием UrlEncode() по параметрам, запрос работает, но ошибки удаленной системы из.

file_get_contents возвращает «false».

Единственный способ, которым это работает - и работал до настоящего времени, - использовать серверный объект «MSXML2.ServerXMLHTTP», который я бы хотел, если это было возможно, но я в недоумении.

+0

Когда я скопировать URL в браузер, я получаю сообщение об ошибке и 404. Вероятно, вы должны сначала проверить, что сервер приложений точно принимает, прежде чем пытаться играть с неизвестные параметры и т. д. Это похоже на API, и должна быть какая-то документация. –

+0

Да, вы получаете ошибку 404: url в моем примере использует поддельный домен, так как это код для моей работы. Как я уже сказал в тексте, загружаемом в браузер напрямую, 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-адреса, и в любом случае да, я пробовал ее с кодировкой, как вы можете видеть в исходном описании. –

Смежные вопросы