IT

PHP의 cURL POST HTTP 요청에 Authorization 헤더를 포함하려면 어떻게 해야 합니까?

itgroup 2022. 10. 19. 22:12
반응형

PHP의 cURL POST HTTP 요청에 Authorization 헤더를 포함하려면 어떻게 해야 합니까?

Gmails OAuth 2.0을 통해 사용자의 메일에 접속하려고 하며, 구글 OAuth 2.0 Playground를 통해 알아보고 있습니다.

여기서는 HTTP REQUEST로 전송해야 한다고 명시되어 있습니다.

POST /mail/feed/atom/ HTTP/1.1
Host: mail.google.com
Content-length: 0
Content-type: application/json
Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString

이 요청을 전송하기 위해 다음과 같은 코드를 작성하려고 했습니다.

$crl = curl_init();
$header[] = 'Content-length: 0 
Content-type: application/json';

curl_setopt($crl, CURLOPT_HTTPHEADER, $header);
curl_setopt($crl, CURLOPT_POST,       true);
curl_setopt($crl, CURLOPT_POSTFIELDS, urlencode($accesstoken));

$rest = curl_exec($crl);

print_r($rest);

작동하지 않습니다. 도와주세요.:)

업데이트: Jason McCreary의 조언을 들어보니 코드는 다음과 같습니다.

$crl = curl_init();

$headr = array();
$headr[] = 'Content-length: 0';
$headr[] = 'Content-type: application/json';
$headr[] = 'Authorization: OAuth '.$accesstoken;

curl_setopt($crl, CURLOPT_HTTPHEADER,$headr);
curl_setopt($crl, CURLOPT_POST,true);
$rest = curl_exec($crl);

curl_close($crl);

print_r($rest);

하지만 난 여기서 아무 결과도 얻지 못하고 있어요.어딘가에서 cURL이 묵묵히 실패하고 있는 것 같습니다.제발 도와주세요.:)

업데이트 2: NomikOS의 트릭으로 해결되었습니다. :) :) 감사합니다!!

대부분의 코드를 가지고 있습니다.

CURLOPT_HTTPHEADERfor는 각 헤더를 요소로 하는 배열을 취합니다.여러 헤더를 가진 요소가 하나 있습니다.

또한 Authorization 헤더를 에 추가해야 합니다.$header어레이를 설정합니다.

$header = array();
$header[] = 'Content-length: 0';
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString';

@contraction-recrearary가 전적으로 옳다.또한 오작동이 발생했을 때 더 많은 정보를 얻으려면 다음 코드를 사용하는 것이 좋습니다.

$rest = curl_exec($crl);

if ($rest === false)
{
    // throw new Exception('Curl error: ' . curl_error($crl));
    print_r('Curl error: ' . curl_error($crl));
}

curl_close($crl);
print_r($rest);

편집 1

디버깅하려면CURLOPT_HEADERfirebug::net 등을 사용하여 HTTP 응답을 체크하려면 true를 선택합니다.

curl_setopt($crl, CURLOPT_HEADER, true);

편집 2

대해서Curl error: SSL certificate problem, verify that the CA cert is OK이 헤더를 추가해 보세요(디버깅을 위해서만, 실가동 환경에서는, 이러한 옵션을true):

curl_setopt($crl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);

"application/json" 대신 "Content-type: application/x-www-form-urlencoded"를 사용합니다.

언급URL : https://stackoverflow.com/questions/12331224/how-to-include-authorization-header-in-curl-post-http-request-in-php

반응형