web-dev-qa-db-ja.com

PHP cURL vs file_get_contents

REST AP​​Iにアクセスするとき、これら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))
98
Salvador Dali

file_get_contents()はシンプルなドライバーです。ヘッダー、HTTPリクエストメソッド、タイムアウト、cookiejar、リダイレクト、その他の重要な事項が関係ない単純なGETリクエストに最適です。

fopen()ストリームコンテキスト で、cURLは setopt で、考えられるすべてのビットとオプションを備えたパワードリルです。

113
Xeoncross

これに加えて、最近のウェブサイトのハッキングのために、サイトをさらに保護する必要がありました。そうすることで、我々はそれを発見しました file_get_contents 動作しなかった、どこ curl それでも動作します。

100%ではありませんが、このphp.ini設定は、 file_get_contents 要求。

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

いずれにしても、コードは curl

22
vr_driver

これは古いトピックですが、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秒でデータを返します

16