twitter facebook

file_get_contents じゃなくて curl を使う理由

とにかく便利な file_get_contents ですが。以下のような問題があるので、ちょっと面倒でも cURL(カール) を使うほうが確実です。
デメリット
  • タイムアウトが設定値通りに動かない。
  • エラーが特定しにくい。
  • 過去リクエストの結果が引き継がれる場合がある。らしい・・・

curl がインストールされているかチェック

PHPプログラムの場合
<?php
$ch = curl_init("http://hogehoge.com/");
?>
シェルの場合
# curl hogehoge.com
以下のようなエラーがでなければ curl はインストールされています。
Call to undefined function curl_init

curl のインストール

Linuxの場合
sudo apt-get install php-curl
ラズパイの場合
sudo apt-get install curl

参考ソース(PHP)

curl_setopt関数で様々なパラメータを設定していきます。
// cURLセッションの初期化
$conn = curl_init(); 
// 取得するURLを指定
curl_setopt($conn, CURLOPT_URL, 'http://hogehoge.com'); 
// 実行結果を文字列で返す。
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); 
// タイムアウトの設定
curl_setopt($conn, CURLOPT_TIMEOUT, 120 );
// 実行
$ret = curl_exec($conn);
//セッションの終了
curl_close($conn);

https + basic認証 + POST を curl で取得。

https ・BASIC 認証 で POSTパラメーターを渡して結果を取得する場合は以下のようにします。
$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, 'http://hogehoge.com'); 
curl_setopt($conn, CURLOPT_TIMEOUT, 120 );
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);

// サーバ証明書の検証は行わない。
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);

// POSTで送信
curl_setopt($conn, CURLOPT_POST, true); 
// BASIC認証
curl_setopt($conn, CURLOPT_USERPWD, 'ID:PASSWORD');
// パラメータを設定
$param = array("name" => 'hoge');
curl_setopt($conn, CURLOPT_POSTFIELDS, http_build_query($param));


$ret = curl_exec($conn);
curl_close($conn);
AUTHOR
@kiki
最終更新日 2018/10/22
FAVORITE good stock
LINK TAG
記法を見る