REST APIにアクセスするとき、これら2つのコードはどのように異なりますか?
$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
そして
$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
どちらも同じ結果を生み出し、
print_r(json_decode($result))
file_get_contents()
はシンプルなドライバーです。ヘッダー、HTTPリクエストメソッド、タイムアウト、cookiejar、リダイレクト、その他の重要な事項が関係ない単純なGETリクエストに最適です。
fopen()
は ストリームコンテキスト で、cURLは setopt で、考えられるすべてのビットとオプションを備えたパワードリルです。
これに加えて、最近のウェブサイトのハッキングのために、サイトをさらに保護する必要がありました。そうすることで、我々はそれを発見しました file_get_contents 動作しなかった、どこ curl それでも動作します。
100%ではありませんが、このphp.ini設定は、 file_get_contents 要求。
; Disable allow_url_fopen for security reasons
allow_url_fopen = 0
いずれにしても、コードは curl。
これは古いトピックですが、APIでの前回のテストでは、cURLはより高速で安定しています。大きなURLのfile_get_contentsには5秒以上かかることがありますが、cURLに必要な時間は1.4〜1.9秒で2倍の速さです。
GETを送信し、JSONコンテンツを受信するだけであることに注意してください。 cURLを適切にセットアップすれば、素晴らしい反応が得られます。送信する必要があるものと受信する必要があるものをcURLに「伝える」だけです。
あなたの試験で、私はこのセットアップをしたいと思います:
$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$result = curl_exec($ch);
このリクエストは、最大0.01秒でデータを返します