400 – Плохой запрос в Curl

Кажется, что я получаю проблему, когда Im пытается отправить запрос на сервер в php. Запрос http api выглядит примерно так:

http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14&apiKey=p9ycn9cxb2zp3k3gfvbf5aym&cid=55505&locale=en_US&hotelId=122212&stateProvinceCode=%20NV%C2%A4cyCode=USD&arrivalDate=12/27/2012&departureDate=12/28/2012&room1=2,&room2=2,18,15&room3=3,16,16,15&room4=3,&includeDetails=true&includeRoomImages=true

У меня есть следующая часть моего кода в php, где я считаю, что ошибка возникает:

 $url = 'http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14'; $url .= '&apiKey=p9ycn9cxb2zp3k3gfvbf5aym'; $url .= '&cid=55505'; $url .= '&locale=' . $locale . '&hotelId=' . $hotelid . '&stateProvinceCode=' . $state . '&currencyCode=USD'; $url .= '&arrivalDate=' . $datefr . '&departureDate=' . $dateto . '&' . $details . '&includeDetails=true&includeRoomImages=true'; $header = "Accept: application/json"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $retValue = curl_exec($ch); $response = json_decode(curl_exec($ch)); $ee = curl_getinfo($ch); print_r($ee); print_r($retValue); 

Это то, что я получаю от инструкции print_r (curl_getinfo ($ ch)):

 Array ( [url] => http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14&apiKey=p9ycn9cxb2zp3k3gfvbf5aym&cid=55505&locale=en_US&hotelId=122212&stateProvinceCode= NV¤cyCode=USD&arrivalDate=12/27/2012&departureDate=12/28/2012&room1=2,&room2=2,18,15&room3=3,16,16,15&room4=3,&includeDetails=true&includeRoomImages=true [content_type] => text/html [http_code] => 400 [header_size] => 181 [request_size] => 340 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.469 [namelookup_time] => 0 [connect_time] => 0.125 [pretransfer_time] => 0.125 [size_upload] => 0 [size_download] => 349 [speed_download] => 744 [speed_upload] => 0 [download_content_length] => 349 [upload_content_length] => 0 [starttransfer_time] => 0.469 [redirect_time] => 0 [certinfo] => Array ( ) [redirect_url] => ) 

Я не уверен, что может быть решением, и я давно искал эту проблему, надеюсь, кто-то может мне помочь. 🙂

Добавить

 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); 

Таким образом, он сообщает, какой тип агента (браузер, паук и т. Д.) Запрашивает контент.

Итак, наконец, я изменил ваш код на

 <?php $url ='http://api.ean.com/ean-services/rs/hotel/v3/avail?minorRev14&apiKey=p9ycn9cxb2zp3k3gfvbf5aym&cid=55505&locale=en_US&hotelId=122212&stateProvinceCode=%20NV%C2%A4cyCode=USD&arrivalDate=12/27/2012&departureDate=12/28/2012&room1=2,&room2=2,18,15&room3=3,16,16,15&room4=3,&includeDetails=true&includeRoomImages=true'; $header = array("Accept: application/json"); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); $retValue = curl_exec($ch); $response = json_decode(curl_exec($ch)); $ee = curl_getinfo($ch); print_r($ee); print_r($retValue); ?> 

и он отлично работает для меня. Можете ли вы также проверить?

В чем-то странно:

& StateProvinceCode =% 20NV% C2% A4cyCode = USD

  ^^^^^^^^^^^^^^^^^^^ 

Преобразуя его в обычный ascii , его «NV¤cyCode»,

Из моего pov это должно быть похоже

& StateProvinceCode = NV & cyCode = USD

Как информация, какую ошибку вы получили от сервера?