PHP cURLの色々な使い方

  • 171
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

phpで外部のサイトにアクセスして様々な情報を取ってきたいときに有効なのがcURL関数。
HTTPリクエストで情報を取るのには、file_get_contentsという関数もあります。以下のようにすることでHTMLを簡単に取得することができます、しかし、リクエストヘッダーを変えたりするなど、リクエスト方法をカスタマイズするには限界があります、そういったカスタマイズを行いたい場合に有用なのがcURLです。しかし、しっかりした情報が少なくて自分が使うの時に苦労したので、様々な使い方をまとめておきます。

file_get_contents使い方
<?php
$url = "http://www.yahoo.co.jp/";
$html = file_get_contents($url);
var_dump($html);

以下からcURLの使い方をまとめていきます。

これで、HTMLが出力されます。

基本的な使い方
<?php
$url = "http://www.yahoo.co.jp/";
$ch = curl_init(); // はじめ

//オプション
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html =  curl_exec($ch);
var_dump($html);
curl_close($ch); //終了

HTTP取得情報を確認する

HTTP情報
<?php

$url = "http://www.yahoo.co.jp/";
$ch = curl_init(); // はじめ

//オプション
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$info = curl_getinfo($ch);//この関数で取得
curl_close($ch); //終了

var_dump($info);
>>
array(22) {
  ["url"]=>
  string(23) "http://www.yahoo.co.jp/"
  ["content_type"]=>
  NULL
  ["http_code"]=>
  int(0)
  ["header_size"]=>
  int(0)
  ["request_size"]=>
  int(0)
  ["filetime"]=>
  int(0)
  ["ssl_verify_result"]=>
  int(0)
  ["redirect_count"]=>
  int(0)
  ["total_time"]=>
  float(0)
  ["namelookup_time"]=>
  float(0)
  ["connect_time"]=>
  float(0)
  ["pretransfer_time"]=>
  float(0)
  ["size_upload"]=>
  float(0)
  ["size_download"]=>
  float(0)
  ["speed_download"]=>
  float(0)
  ["speed_upload"]=>
  float(0)
  ["download_content_length"]=>
  float(-1)
  ["upload_content_length"]=>
  float(-1)
  ["starttransfer_time"]=>
  float(0)
  ["redirect_time"]=>
  float(0)
  ["certinfo"]=>
  array(0) {
  }
  ["redirect_url"]=>
  string(0) ""
}

よく使うオプション

基本オプション
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//変数に保存する
curl_setopt($ch, CURLOPT_HEADER, true); // ヘッダも出力したい場合

proxy接続を行う

proxy接続
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);//アクセスポート
curl_setopt($ch, CURLOPT_PROXY, "192.168.0.1");//IPアドレスかURL

POST送信

POST送信
<?php 
//postするデータの配列
$post_data = array('id' => "id" ,'password'=> "pass" ,"mode"=>"login");

curl_setopt($ch,CURLOPT_POST, true);

//データの配列を設定する
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));

Cookieを扱う

Cookieを扱う
<?php
// Cookie情報を保存する一時ファイルディレクトリにファイルを作成します
$tmp_path =  tempnam(sys_get_temp_dir(), "CKI");

//postするデータの配列
$account_data = array('id' => "id" ,'password'=> "pass" ,"mode"=>"login");

$url = "http://www.pixiv.net/login.php";

$ch = curl_init(); // はじめ

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//POST送信
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($account_data));


//Cookie受信
//cookieオプション
curl_setopt($ch,CURLOPT_COOKIEFILE,$tmp_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path);
curl_exec($ch);//実行
curl_close($ch); //終了


$url = "http://www.pixiv.net/mypage.php";
$ch = curl_init(); // はじめ

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Cookie送信
//cookieオプション
curl_setopt($ch,CURLOPT_COOKIEFILE,$tmp_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path);

$html = curl_exec($ch);//実行
curl_close($ch);

var_dump($html);

//一時ファイル削除
unlink($tmp_path);

リクエストヘッダーを付加する

リクエストヘッダーを付加
<?php
$headers = array(
    "HTTP/1.0",
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Encoding:gzip ,deflate",
    "Accept-Language:ja,en-us;q=0.7,en;q=0.3",
    "Connection:keep-alive",
    "User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:26.0) Gecko/20100101 Firefox/26.0"
    );


$url = "http://www.ugtop.com/spill.shtml";
$ch = curl_init(); // はじめ
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//ヘッダー追加オプション
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$html =  curl_exec($ch);
$html = mb_convert_encoding($html,"UTF-8","EUC-JP");
var_dump($html);
curl_close($ch); //終了

とりあえず、基本的な部分はまとめられたかと思います。

まだ様々なオプションがありますが、紹介しきれないのでいかに参考になりそうなURLを張っておきます。

公式マニュアル
http://php.net/manual/ja/book.curl.php

オプション一覧
http://jp2.php.net/curl_setopt

cURLのラッパークラスを作ってくださっている
http://qiita.com/mpyw/items/c65fb4ec4cef80909a47

CURLのセッションを引き継ぐ方法:PHPプロの記事
http://www.phppro.jp/phptips/archives/vol16/3