Help us understand the problem. What is going on with this article?

PHP cURLの色々な使い方

More than 5 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした