サイト移転のお知らせ

しばらくブログお休みしていましたが、こちらに移転しました。よろしければこちらへどうぞ。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PHPでHTTPを使ってサーバからデータを取得する

phpでHTTPリクエストを送信するためにはHTTP_Client::get()やhttp_get()のメソッドを使う、もしくはcurlなどのコマンドを直接呼び出すなんて方法も無くはないですが、HTTP_Clientを使う方法を紹介します。
HTTP_Clientを使うためにはHTTP_Clientパッケージが必要です。パッケージが入っているかどうかは、以下のコマンドで調べられます。
$ pear list

また、HTTP_Clientが入ってない場合、以下のコマンドでインストールできます。
pear install --alldeps HTTP_Client
--alldepsオプションを付けることで、必要な他のパッケージもまとめてインストールしてくれます。
MacOS X (10.8.3)には入っていませんでしたが、上記のコマンドで入れました。
サクラインターネットのレンタルサーバには始めから入っていました。

では、具体的な手順です。

1. パッケージの読み込み。
前述のとおりHTTP_Clientパッケージが必要なので読みこんでおきます。
require_once 'HTTP/Client.php';

2. インスタンスの生成
$client = new HTTP_Client();

3. HTTP GETの送信
http://www.google.co.jpにリクエストを送信する例です。戻り値はHTTPのレスポンスコードです。
リダイレクトされた場合でも自動的にリダイレクト先にリクエストを送信してくれます。
以下の例ではレスポンスコードが200以外の場合は終了するようにしています。
$responseCode = $client->get('http://www.google.co.jp');
if($responseCode!=200) {
    exit;
}


4. レスポンスを取り出す
HTTP_Client::currentResponse()で配列としてレスポンスを取り出すことができます。
配列からキー'body'でHTTPボディを取り出せます。
$response = $client->currentResponse();
$html = $response['body'];

キーは'body'の他にcodeとheadersがあるのでヘッダも取得できます。

以上、簡単ですね。
まとめてサンプルコード載せておきます。

サンプルコード
<?php
require_once 'HTTP/Client.php';

$client = new HTTP_Client();

$responseCode = $client->get('http://www.google.co.jp');
if($responseCode!=200) {
    exit;
}
$response = $client->currentResponse();
$html = $response['body'];
print_r($html);

?>



最もシンプルと思われる例で説明しましたが、各メソッドのパラメータでいろいろとカスタマイズできます。APIリファレンスのリンクを載せましたので詳細はこちらをご覧ください。

constructor HTTP_Client::HTTP_Client()
http://pear.php.net/manual/en/package.http.http-client.http-client.http-client.php

HTTP_Client::get()
http://pear.php.net/manual/en/package.http.http-client.http-client.get.php

HTTP_Client::currentResponse()
http://pear.php.net/manual/en/package.http.http-client.http-client.currentresponse.php

以上、超内輪向きのエントリでした(笑)
関連記事
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

No title

サンプルコードを試してみたのですが、文字化けしました。

Re: No title

ななしさん

コメントありがとうございます。
おっしゃるとおり、サンプルコードは文字コードを全く意識していません(^^;

サンプルコードをsample.phpとして、nkfコマンドでgoogle.co.jpの文字コードを確認したところ
-------------------------------
$ php sample.php | nkf --guess
Shift_JIS (LF)
-------------------------------
と、おそらくShift_JISのようなので、お使いのコンソール(ターミナル)アプリの文字コードがUTF-8であれば文字化けします(私の環境でも同様でした)。

-------------------------------
$ php sample.php | nkf -w
-------------------------------
上記のようにnkfコマンドの"-w"オプションを使えば、出力の日本語の部分が表示されると思います。
※nkfコマンドは別途インストールする必要があるかもしれません。
サイト内検索
プロフィール

Author:imxs

Androidアプリ開発などを行っているimxsの開発者です。気になることを調べてメモって行きます。ほとんどの人にはどうでもいい内容でも、広い世の中一人くらいは同じ疑問を持った奇妙な人がいることを信じつつ。暖かい目で見守ってやってください。
imxsの開発者ブログは移転しました。よろしければこちらへどうぞ。

カテゴリ
最新記事
リンク
RSSリンクの表示
最新コメント
最新トラックバック
FC2カウンター
アクセスランキング
[ジャンルランキング]
携帯電話・PHS
117位
アクセスランキングを見る>>

[サブジャンルランキング]
Android(Google)
33位
アクセスランキングを見る>>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。