2014-01-28 2 views
1

yesmail api에 간단한 GET 요청을하려고하는데 브라우저에 직접 붙여 넣을 수있는 URL이 있습니다. 올바른 정보가 표시되고 다음 코드를 파이어 폭스 위해 RESTClient에서 간단한 문서에 표시된 내가 올바른 응답을 얻을 :PHP를 사용하여 GET 요청하기

GET https://services.yesmail.com/enterprise/[email protected] HTTP/1.1 
Accept-Encoding: gzip,deflate 
User-Agent: Jakarta Commons-HttpClient/3.1 
Authorization: Basic xxxxxxxxxxxxx 
Host: services.yesmail.com 

그러나, CURL을 사용하여, 나는 점점 오전 것도, 전혀 HTTP 응답 단지 빈 페이지를 연결하지하려고 할 때. 내가 뭘 잘못하고 있는지 모르겠다.

$url = "https://services.yesmail.com/enterprise/[email protected]"; 
$header[] = "Accept-Encoding: gzip, deflate"; 
$header[] = "User Agent: Jakarta Commons-HttpClient/3.1"; 
$header[] = "Authorization: Basic xxxxxxxxxxxxx"; 
$header[] = "Host: services.yesmail.com"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_USERPWD, 'xxxxx:xxxxxxxxxx'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = (curl_exec($ch)); 
print_r($response); 
curl_close($ch); 

내가 위해 RESTClient에 넣어 정보가 CURL의 헤더에가는 생각에 내가 잘못이 내가 가진 무엇인가? 내가 API와 함께 작업 한 것은 이번이 처음이다.

갱신 (GET 메서드 내 고유의 가입자 번호와 단지 URL입니다) 내가 올바른 응답을 얻을 기능 file_get_contents 사용 :

$context = stream_context_create(array(
'http' => array(
    'header' => "Authorization: Basic " . base64_encode("*******:********") 
) 
)); 
$data = file_get_contents('https://services.yesmail.com/enterprise/[email protected]', false, $context); 

echo $data; 

그러나 내가 정말 CURL을 얻으려면을 나는 가입자를 추가 할 수 있기를 원할 것입니다.

답변

1

저는 실제로 Yesmail에서 일하므로 여기에서 도와 드릴 수 있습니다.

다음 코드 시도 (인코딩 된 base64로 인증 정보와 your-auth-here 텍스트를 교체해야하고 $ym_api_url에서 해당 URL을 설정)을 출력 추가 진단 정보

<?php 

// Set the HTTP headers needed for this API call. 
$http_headers = array(
    "Authorization: Basic your-auth-here", 
    "Accept: application/json", 
    "Connection: close",     // Disable Keep-Alive 
    "Expect:"        // Disable "100 Continue" server response 
); 

// URL Endpoint of the API to be called. 
$ym_api_url = 'https://services.yesmail.com/enterprise/[email protected]'; 

$curl_hdl = curl_init(); 

$curl_options = array(
    CURLOPT_VERBOSE => 1,     // Verbose mode for diagnostics 
    CURLOPT_HEADER => TRUE,    // Include the header in the output. 
    CURLOPT_HTTPHEADER => $http_headers, // HTTP headers to set 
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC, // Use basic authentication. 
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS, // Bitmask of protocols libcurl may use in this transfer 
    CURLOPT_RETURNTRANSFER => TRUE,  // Return result as return value of curl_exec() 
    CURLOPT_URL => $ym_api_url,   // URL to POST data to 
); 

curl_setopt_array($curl_hdl, $curl_options); 

// Make the API call 
$response = curl_exec($curl_hdl); 

// Get the http response code 
$http_response_code = curl_getinfo($curl_hdl, CURLINFO_HTTP_CODE); 

curl_close($curl_hdl); 

echo PHP_EOL . "INFO: HTTP Response Code was: " . $http_response_code . PHP_EOL; 

if ($response === false) 
{ 
    echo PHP_EOL . "ERROR: curl_exec() has failed." . PHP_EOL; 
} 
else 
{ 
    echo PHP_EOL . "INFO: Response Follows..." . PHP_EOL; 
    echo PHP_EOL . $response; 
} 

?> 

CURLOPT_VERBOSE => 1 옵션을 제공합니다. 그 문제가 특정 문제를 지적하는지 확인하십시오. 문제가 해결되면 해당 옵션을 제거하거나 비활성화 할 수 있습니다.

또한, 귀하는 언제든지 Yesmail 계정 관리자에게 도움을 요청하십시오.

+0

위대한, 도와 주셔서 감사합니다, 당신이 준 코드를 사용하고 지금 나는 무언가를 얻고 있습니다 ** 정보 : HTTP 응답 코드 : 0 오류 : curl_exec() 실패했습니다. ** 그래서 HTTP 응답 0, 이것을 보았고 응답을 받기 전에 통화가 취소 될 때 가끔 이런 상황이 발생할 수 있다는 것을 알았습니까?나는'file_get_contents' 함수를 사용하여 어떤 응답도 얻을 수 있는지 확인하려고 노력했습니다. (사용 된 코드로 제 질문을 업데이트했습니다) –

+1

CURLOPT_VERBOSE => 1 세트를 사용하여 이것을 실행할 때, 일부 진단 메시지 (STDERR에 쓰여짐)를 받았습니다. 이러한 메시지 (이론적으로)는 문제가 무엇인지 표시해야합니다. 게시물의 수정 사항에 해당 진단 메시지를 제공 할 수 있습니까? 명령 행이 아닌 웹 페이지에서 이것을 실행하면 메시지를 얻기 위해 추가 작업을해야 할 수도 있습니다. 방법에 대한 정보는 [이 답변] (http://stackoverflow.com/a/14436877)을 참조하십시오. –

+0

나는 지금 일하고있다! :) 도와 주셔서 정말 감사합니다. –

0

따라서 $response이 표시되지만 아무 것도하지 않습니다.

코드에 아무 것도 표시되지 않는 줄이 없습니다.

업데이트 : 질문이 업데이트되었습니다.

매우 중요한 규칙 : 항상 API 호출의 반환 값을 확인하십시오.

curl_exec()은 FALSE를 반환하여 오류를 표시합니다.이 경우 FALSE를 반환하는 경우 curl_error($ch)으로 확인하십시오.

+0

확인을 추가했지만 여전히 빈 페이지 만 반환 중입니까? 오류가없고 아무것도 없습니다. –

+0

당신은 우리의 시간을 낭비하고 있습니다. 문제를 재현하는 코드를 제공하십시오. –

관련 문제