2017-06-30 18 views
0

Googleドライブのフォルダからファイルを一覧表示しようとしています。GoogleドライブのAPI file_get_contentsとrefferer

私はjqueryのを使用している場合、私は成功した私の結果を得ることができます。

var url = "https://www.googleapis.com/drive/v3/files?q='" + FOLDER_ID + "'+in+parents&key=" + API_KEY; 

$.ajax({ 
    url: url, 
    dataType: "jsonp" 
}).done(function(response) { 
    //I get my results successfully 
}); 

しかし、私は、これはPHPで結果を取得したいと思いますが、私はこれを実行する場合:

$url = 'https://www.googleapis.com/drive/v3/files?q='.$FOLDER_ID.'+in+parents&key='.$API_KEY; 
$content = file_get_contents($url); 
$response = json_decode($content, true); 
echo json_encode($response); 
exit; 

を私はエラーを取得します:

file_get_contents(...): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

私は、ブラウザでこれを実行する場合:

https://www.googleapis.com/drive/v3/files?q={FOLDER_ID}+in+parents&key={API_KEY} 

私が取得:

The request did not specify any referer. Please ensure that the client is sending referer or use the API Console to remove the referer restrictions.

私はGoogleの開発者コンソールで私のウェブサイトおよびlocalhostの参照元を設定しています。

jqueryとphpコールの違いは何ですか?また、なぜphpコールが失敗するのですか?

+0

ファイル\ _get \ _contents()を使用すると500エラーが発生するのですが、ブラウザで動作するのはなぜですか?](https://stackoverflow.com/questions/10524748/why-im-getting- 500エラー - 使用中のファイル取得コンテンツ - ブラウザで動作する) – TheNavigat

答えて

0

これはヘッダーかクッキーのいずれかです。

jQueryを使用してリクエストを実行すると、ユーザーエージェント、IP、およびユーザーの余分なヘッダーがユーザーのCookie(ユーザーがログインできる状態)に加えてGoogleに送信されます。 PHPを使用すると、のサーバーが、ユーザーでもユーザーのブラウザでもなく、データを送信するユーザーになるため、このデータが失われます。

これは、最初の防衛線として、無効なユーザーエージェントでそのGoogleのブロックのリクエストであるかもしれない、またはあなたは、ログインする必要があること。

あなたがログアウトしている間に同じjQueryのAJAX要求を行ってみてください。それがうまくいかない場合、あなたはあなたの問題を知っています。

それ以外の場合は、ヘッダーを変更する必要があります。これを見てみましょう:PHP file_get_contents() and setting request headers。もちろん、欠落しているヘッダーがリクエストを通過できるようにするには、試行錯誤をする必要があります。

リファラーについては、リファラーヘッダーが現在表示されているページとして設定されているため、jQueryが機能します。ページに直接行くと、リファラーヘッダーはありません。 file_get_contentsを使って作られたPHPリクエストにはリファラーがありません。