117

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))
4

3 に答える 3

136

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

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

于 2012-06-16T16:00:40.797 に答える
29

これに加えて、最近の Web サイトのハッキングにより、サイトをさらに保護する必要がありました。その際、 file_get_contentsが機能しないことを発見しましたが、curlは引き続き機能します。

100% ではありませんが、この php.ini 設定がfile_get_contentsリクエストをブロックしている可能性があると思います。

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

いずれにせよ、コードはcurlで動作するようになりました。

于 2013-01-07T01:51:31.347 に答える
23

これは古いトピックですが、ある API での最後のテストでは、cURL の方が高速で安定しています。cURL が 1.4 ~ 1.9 秒しか必要としない場合でも、より大きなリクエストの file_get_contents は 5 秒以上かかることがあります。これは 2 倍の速さです。

これについて、GET を送信して JSON コンテンツを受信するだけであるという 1 つのメモを追加する必要があります。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.10 秒でデータを返します

于 2016-05-16T14:12:37.297 に答える