home(h) links(l) memo(m) translation(t) profile(r)
memo(m) cgi(u) PHP(p) cURL

cURL - PHP関係

目次

使い方

POSTメソッドで文字列を送信(送信値を配列で指定する場合)

送信先URLは「http://www.example.com/」、送信する値は「arg1=val1&arg2=val2」である場合の事例を以下に示す。

<?php
# cURLセッションを初期化
$ch = curl_init();

## cURL転送オプションを設定
# 取得するURL
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
# この値は以下のようにcURLセッション初期化時に指定することもできます
# $ch = curl_init("http://www.example.com/");

# メソッドにPOSTを指定
curl_setopt($ch, CURLOPT_POST, true);

# HTTP HEADERを指定
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: multipart/form-data'));

# 送信値をセット ※値をURLエンコードした文字列で指定する場合はこちら
curl_setopt($ch, CURLOPT_POSTFIELDS, array('arg1'=>'val1','arg2'=>'val2'));

# cURL実行
curl_exec($ch);

# cURLセッションを閉じる
curl_close($ch);

POSTメソッドで文字列を送信(送信値をURLエンコードした文字列で指定する場合)

送信先URLは「http://www.example.com/」、送信する値は「arg1=val1&arg2=val2」である場合の事例を以下に示す。

<?php
# cURLセッションを初期化
$ch = curl_init();

## cURL転送オプションを設定
# 取得するURL
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
# この値は以下のようにcURLセッション初期化時に指定することもできる
# $ch = curl_init("http://www.example.com/");

# メソッドにPOSTを指定
curl_setopt($ch, CURLOPT_POST, true);

# HTTP HEADERを指定
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: multipart/form-data'));

# 送信値をセット ※値を配列で指定する場合はこちら
curl_setopt($ch, CURLOPT_POSTFIELDS, "arg1=val1&arg2=val2'));

# cURL実行
curl_exec($ch);

# cURLセッションを閉じる
curl_close($ch);
>

POSTメソッドでファイルを送信

<?php
# cURLセッションを初期化
$ch = curl_init();

# POST先URLを指定
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
# この値は以下のようにcURLセッション初期化時に指定することもできる
# $ch = curl_init("http://www.example.com/");

# CURLFileクラスのオブジェクトを作成
$cfile = new CURLFile('test.jpg','image/jpeg','testfilename');

# メソッドをPOSTにセット
curl_setopt($ch, CURLOPT_POST,true);

# HTTP HEADERにContent-Typeをセット
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: multipart/form-data'));

# データをセット
curl_setopt($ch, CURLOPT_POSTFIELDS,array('testfile'=>$cfile));

# cURL実行
curl_exec($ch);

# cURLセッションを閉じる
curl_close($ch);

POSTメソッドで変数値をファイルとして送信

PHPの変数値を一旦ファイルに出力することなく直接ファイルとして送信する方法。 このとき使うCURLStringFileクラスはPHP 8.1.0以降で利用可能。

<?php
# cURLセッションを初期化
$ch = curl_init();

# POST先URLを指定
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
# この値は以下のようにcURLセッション初期化時に指定することもできる
# $ch = curl_init("http://www.example.com/");

# CURLStringFileクラスのオブジェクトを作成
$cfile = new CURLStringFile($testtext,'testfilename','application/octet-stream',);

# メソッドをPOSTにセット
curl_setopt($ch, CURLOPT_POST,true);

# HTTP HEADERにContent-Typeをセット
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: multipart/form-data'));

# データをセット
curl_setopt($ch, CURLOPT_POSTFIELDS,array('testfile'=>$cfile));

# cURL実行
curl_exec($ch);

# cURLセッションを閉じる
curl_close($ch);

コマンドリファレンス

curl_close(cURLセッションを閉じる)

curl_close[1_1]は、cURLセッションを閉じてリソースを開放する。cURLハンドルも削除される。

【書式】
curl_close(cURLハンドル);

引数

cURLハンドル
[cURLハンドル]curl_initが返すcURLハンドル。指定必須。

戻り値

なし

curl_exec(cURLセッションを実行)

curl_exec[1_2]は、cURLセッションを実行する。実行に先立ち、curl_initによるセッションの初期化とcurl_setoptによるオプション設定を済ませておく必要がある。

【書式】
curl_exec(cURLハンドル);

引数

cURLハンドル
[cURLハンドル]curl_initが返すcURLハンドル。指定必須。

戻り値

成功
[論理値]true(ただしcurl_setoptでCURLOPT_RETURNTRANSFERを設定している場合は取得結果([文字列]))
失敗
[論理値]false

例:cURLセッション$chを実行

curl_exec($ch);

curl_init(cURLセッションを初期化)

curl_init[1_3]は、cURLセッションを開始するにあたって最初に必要となる初期化を行ってcURLハンドルを返す。

【書式】
curl_init(URL);

引数

URL
[文字列]アクセス先URL。指定任意、指定がない場合の既定値はnull。 この値はcurl_setoptでも指定可能。

戻り値

成功
[cURLハンドル]
失敗
[論理値]false

例1:cURLセッションを初期化するだけ

curl_init();

例2:cURLセッションを初期化し、アクセス先URLとして「http://www.example.com/」を設定

curl_init("http://www.example.com/");

curl_setopt(cURL通信の各種設定)

curl_setopt[1_4]は、cURL転送を行う際の各種指定を行う。

【書式】
curl_setopt(cURLハンドル,オプション,);

引数

cURLハンドル
[cURLハンドル]curl_initが返すcURLハンドル。指定必須。
オプション
所定の値により指定したいオプションの種別を指定する。指定必須。以下のような値が指定できる。
CURLOPT_URL

[文字列]取得するURL。

curl_initでcURLセッションを初期化するときに指定することもできる。

例:アクセス先URLとして「http://www.example.com/」を設定

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
CURLOPT_POST

[論理値]値にtrueを設定するとPOSTのHTTPメソッドを使って通信を行う。POSTはapplication/x-www-form-urlencodedのContent-Typeを使う。Formを使ってPOST形式でデータを送信する操作に相当する。実際に送る値はCURLOPT_POSTFIELDSのオプションで指定する。

例:POSTのHTTPメソッドを使って通信を行うよう設定する

curl_setopt($ch, CURLOPT_POST, true);
CURLOPT_POSTFIELDS

[文字列 または 配列]HTTP POSTメソッドで送信するデータを指定する。値はURLエンコードされた「arg1=val1&arg2=val2&...」のような文字列形式(application/x-www-form-urlencoded)で渡すことも、フィールド名をキー、データを値とした配列(multipart/form-data)で渡すこともできる。配列で渡す場合、 Content-Type ヘッダに multipart/form-data を設定する。このオプションでデータを送る前にCURLOPT_POSTオプションでPOSTメソッドにより通信するよう設定しておく必要がある。

例1:「arg1=val1&arg2=val2」を送信する値として設定する(URLエンコードされた文字列で指定)

curl_setopt($ch, CURLOPT_POSTFIELDS, "arg1=val1&arg2=val2");

例2:「arg1=val1&arg2=val2」を送信する値として設定する(配列で指定)

curl_setopt($ch, CURLOPT_POSTFIELDS, array('arg1'=>'val1','arg2'=>'val2'));
CURLOPT_HTTPHEADER

[配列]設定するHTTPヘッダフィールドを配列で指定する。

例1:コンテンツタイプが「multipart/form-data」であることを伝える設定をする

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));

参考文献・サイト

  1. PHP: cURL - Manual