Gmail OAuth 2.0を介してユーザーのメールにアクセスしようとしていますが、GoogleのOAuth 2.0 Playgroundでこれを把握しています。
ここでは、これを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);
動作しない、助けてください。 :)
PDATE:私は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のトリックは私のためにそれをしました。 :) :) :) ありがとうございました!!
@ 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
デバッグするには、CURLOPT_HEADER
をtrueに設定して、 firebug :: net などで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);
ほとんどのコードがあります…
CURLOPT_HTTPHEADER
for curl_setopt()
は、各ヘッダーを要素として持つ配列を取ります。複数のヘッダーを持つ1つの要素があります。
$header
配列にAuthorizationヘッダーを追加する必要もあります。
$header = array();
$header[] = 'Content-length: 0';
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: OAuth SomeHugeOAuthaccess_tokenThatIReceivedAsAString';
「application/json」の代わりに「Content-type:application/x-www-form-urlencoded」を使用します