2012-12-07 3 views
3

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=true400 - Curl에서 잘못된 요청이 있습니다.

I가 나는 오류가 발생하는 것으로 판단 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 ($의 채널)) 문 :

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] => 
) 

나는 해결책이 될 수 있는지 확실하지 않다 나는 잠시 지금 희망이 문제에서 찾고있다 완전히 사람이

답변

9

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

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

Converting it to plain ascii, 그 "NV¤cyCode"

내 POV에서 그것이 있어야 :

+0

@Leigh added explaination, CURLOPT_USERAGENT에서 'USERAGENT'는 자체 설명입니다 – user7282

+2

@ 일부 서버는 거미/크롤러 또는 봇을 차단하고 브라우저 만 허용하기 때문에 – user7282

+0

이것은 답변에 추가해야하는 정보의 종류입니다 ** 처음부터 **. 하나의 코드만으로는 충분하지 않습니다. – Leigh

0

이는 이상한 일이다 like

& stateProvinceCode = NV & cyCode = USD

정보와 마찬가지로 서버에서 어떤 종류의 오류가 발생 했습니까?

+0

400 - 잘못된 응답 curl 응답 –

+0

그냥 제목 ... 오늘은 분명히 피곤 해요;) stateProvinceCode를 "학문적"으로 변경하려고 시도 했습니까? – Arcadien

+0

지금 막 stateProvinceCode 및 통화 코드를 변경할 수 있습니다 ...하지만 도움이되지 않았습니다. –

관련 문제