73

GmailのOAuth2.0を介してユーザーのメールにアクセスしようとしていますが、これはGoogleのOAuth2.0Playgroundを介して把握しています。

ここで、彼らは私がこれをHTTPリクエストとして送信する必要があると指定しました:

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のトリックは私のためにそれをしました。:) :) :) ありがとうございました!!

4

3 に答える 3

48

ほとんどのコードがあります…</p>

CURLOPT_HTTPHEADERforcurl_setopt()は、各ヘッダーを要素として持つ配列を取ります。複数のヘッダーを持つ1つの要素があります。

また、 Authorizationヘッダーを$header配列に追加する必要があります。

$header = array();
$header[] = 'Content-length: 0';
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString';
于 2012-09-08T13:46:55.710 に答える
29

@jason-mccrearyは完全に正しいです。さらに、誤動作が発生した場合に詳細情報を取得するために、このコードをお勧めします。

$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

デバッグするには、trueに設定して、 firebug::netCURLOPT_HEADERなどでHTTP応答をチェックします。

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);
于 2012-09-08T14:03:31.273 に答える
0

「application/json」の代わりに「Content-type:application/x-www-form-urlencoded」を使用してください

于 2019-02-22T07:29:34.047 に答える