2016-10-20 13 views
1

私はAPIサイトにリクエストするためにPHP Curlを使用しようとしています。現時点では簡単なリクエストをしようとしていますPHP CORSリクエストを作成するにはどうすればよいですか?

APIサイトには、JSON形式のデータを返すディレクトリがあります。スクリプトは以下の通りである:私は私のブラウザからAPIサイト(API/test_json)にアクセスした場合

<?php 
header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); 
header('Access-Control-Max-Age: 1000'); 
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With'); 

$arr['id'] = '001'; 
$arr['desc'] = 'Simple JSON output'; 

$json = json_encode($arr); 

echo $json; 
?> 

\、私はJSONデータを参照してください。 enter image description here

私がしようとして別のドメイン上のPHPスクリプトを持っています

<?php 
$url = "http://ourapi.com/test_json/"; 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_SSLVERSION, 3); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
$str = curl_exec($curl); 
curl_close($curl); 

var_dump($str); 
?> 

私が実行すると、私はbool(false)の戻り値を取得します。私のコードで何かを忘れましたか?

+0

URLでsslが使用されていない場合、なぜsslオプションを設定していますか?ちなみに、PHPからapiを呼び出す場合、CORSヘッダーは必要ありません。javascriptからapiを直接呼び出す場合にのみ必要です。 – jeroen

+0

SSLを削除できます。残念ながら、JavaScriptはオプションではありません。 –

答えて

0

サーバサイドのコールは、クロスオリジンリクエストポリシーの対象外です。問題は、APIの可用性のどこかにあります。認証は必要ですか?おそらくあなたがブラウザからそれを要求するとき、あなたはセッションクッキーを持っています。

コードを簡略化してfile_get_contents("http://ourapi.com/test_json/");にすると、すべてのエラーが表示され、エラーが表示されます。

+0

私が見ている問題は、私がAPIを呼び出しているWebホストがfile_get_contents()を呼び出せないことです。うまくいけば、私は依然としてサーバー側のCORS要求を行うことができます。 –

+0

URLを含むfile_get_contents()が制限されている場合、CURLも無効にできないのですか?あなたはGoogle AppEngineのようなものでこのコードを実行していますか? – astax

+0

一部のWebホストはfile_get_contents()の使用を制限しますが、CURLを許可します。コードは私たちのウェブホストで実行されています –

関連する問題