トップへ(mam-mam.net/)

PHPでfile_get_contentsやcurlでhttp、https通信 ~PHPサンプルソースコード集

検索:

PHPでfile_get_contentsやcurlでhttp、https通信 ~PHPサンプルソースコード集

file_get_contentsやcurlを使えばHTTP又はHTTPS通信が可能です。

最初に確認すること

●file_get_contentsでhttp通信する場合
php.iniの設定が
allow_url_fopen = On
となっていなければなりません。
●curlでhttp通信する場合
curlがインストールされていなければなりません。
また、php.iniの設定に
extension=curl
があることを確認しましょう。
https通信する場合
opensslがインストールされていなければなりません。
また、php.iniの設定に
extension=php_openssl
があることを確認しましょう。

file_get_contentsで通信する場合

GETの場合

$options=[
  'http'=>[
    'method' => 'GET',
    'timeout'=>10, //タイムアウト時間(秒)
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ]
];
$context=stream_context_create($options);
//通信したいURLを記述する
$url='https://mam-mam.net/';
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

POSTの場合

//POSTするデータを設定
$data=['a'=>'あいうえお','b'=>'1'];
//POST先に合わせて文字コードを変換 (必要な場合)
mb_convert_variables('UTF-8', 'UTF-8', $data);
//クエリ文字列の生成
$data = http_build_query($data, "", "&");
$options=[
  'http'=>[
    'method' => 'POST',
    'timeout'=>10, //タイムアウト時間(秒)
    'header' => 'Content-Type: application/x-www-form-urlencoded'."\r\n".
                'Content-Length: '.strlen($data)."\r\n".
                'Cache-Control: no-cache',
    'content' => $data,
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ]
];
$context=stream_context_create($options);
//通信したいURLを記述する
$url='https://mam-mam.net/';
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

GETでBASIC認証(基本認証)の場合

$options=[
  'http'=>[
    'method' => 'GET',
    'timeout'=>10, //タイムアウト時間(秒)
    'header'=>'Authorization: Basic '.base64_encode('ユーザー名'.':'.'パスワード')."\r\n"
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ]
];
$context=stream_context_create($options);
//通信したいURLを記述する
$url='https://mam-mam.net/';
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

GETで無効な証明書のサイトにHTTPS通信する場合

$options=[
  'http'=>[
    'method' => 'GET',
    'timeout'=>10, //タイムアウト時間(秒)
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ],
  'ssl'=>[
    'verify_peer'=>false,
    'verify_peer_name'=>false,
  ]
];
$context=stream_context_create($options);
//通信したいURLを記述する
$url='https://mam-mam.net/';
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

GETで無効な証明書のサイトにHTTPS通信するがサーバ証明書ファイルがある場合

$options=[
  'http'=>[
    'method' => 'GET',
    'timeout'=>10, //タイムアウト時間(秒)
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ],
  'ssl'=>[
    'verify_peer'=>true,
    'cafile'=>'/home/hoge.csr', //サーバ証明書
  ]
];
$context=stream_context_create($options);
//通信したいURLを記述する
$url='https://mam-mam.net/';
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

GETでクライアント証明書が必要な場合

クライアント証明書はpem形式に変換したものを使用します

$options=[
  'http'=>[
    'method' => 'GET',
    'timeout'=>10, //タイムアウト時間(秒)
    'ignore_errors' => true, //ステータスコードが4xxや5xxでもコンテンツを取得
  ],
  'ssl'=>[
    'verify_peer'=>false,
    'verify_peer_name'=>false,
    'local_cert', '/home/hoge.pem',//クライアント証明書
    'passphrase'=>'パスフレーズ',
  ]
];
$context=stream_context_create($options);
$url='https://mam-mam.net/'; //取得したいURLを記述する
$res=file_get_contents($url,false,$context);
//レスポンスヘッダーの1行目からhttpレスポンスコードを取得
preg_match('/^HTTP\/1\.[0|1|x] ([0-9]+) (.*)$/',$http_response_header[0],$matches);
$http_response_code=$matches[1];  //httpレスポンスコード
$http_response_text=$matches[2];  //httpレスポンステキスト
if($res){echo $res;}else{echo "error\n";}

cURLで通信する場合

GETの場合

mb_internal_encoding("UTF-8");
$ch = curl_init();
//GETする値の設定
$get_param = '?get1='.curl_escape($ch,'GET値1').'&get2='.curl_escape($ch,'GET値2');
//基本認証が必要な場合
$hds = ["Authorization: Basic ".base64_encode('ユーザー'.':'.'パスワード'),];
//通信したいURLを記述する
$url='https://mam-mam.net/';
curl_setopt($ch, CURLOPT_URL, $url.$get_param);
curl_setopt($ch, CURLOPT_HTTPGET, true);           //メソッドがGET
curl_setopt($ch, CURLOPT_HTTPHEADER, $hds);       //基本認証ヘッダー
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  //サーバー証明書の検証を行わない
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  //SSLピア証明書のSubject Alternate NameやCommon Nameのチェックをしない
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   //curl_exec()の返り値を文字列で返してもらう
curl_setopt($ch, CURLOPT_TIMEOUT, 10);            //タイムアウト時間(秒)
//エージェントを入れる場合
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X)');
$res = curl_exec($ch);

POSTの場合

mb_internal_encoding("UTF-8");
//POSTする値の設定
$content = http_build_query(array('post1' => 'POST値1', 'post2' => 'POST値2'));
$ch = curl_init();
//基本認証が必要な場合、およびコンテント長ヘッダーの設定
$hds = [
  "Authorization: Basic ".base64_encode('ユーザー'.':'.'パスワード'),
  "Content-length: " . strlen($content),
];
//通信したいURLを記述する
$url='https://mam-mam.net/';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);             //メソッドPOST
curl_setopt($ch, CURLOPT_HTTPHEADER, $hds);       //基本認証、コンテント長ヘッダー
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  //サーバー証明書の検証を行わない
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  //SSLピア証明書のSubject Alternate NameやCommon Nameのチェックをしない
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   //curl_exec()の返り値を文字列で返してもらう
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);   //POST値設定
curl_setopt($ch, CURLOPT_TIMEOUT, 10);            //タイムアウト時間(秒)
//エージェントを入れる場合
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X)');
$res = curl_exec($ch);

PHPサンプル集一覧へ