SOFTELメモ

Softel Inc.

【php】ベーシック認証のかかっているWebページの内容を取得する

問題

あるWebページの内容を取得したかったのですが、ベーシック認証がかかってました。

どうやって取得したらよいでしょうか。

basic-auth

答え

まずお手軽には、URLにIDとパスワードを含めてしまえば、file_get_contents()できる。

file_get_contents('http://user:password@example.com/hoge/fuga');

他に、

など、URLに認証情報を含められない場合は、Authorizationヘッダをリクエストに含める。

Authorizationヘッダの値は、以下の形式(ベーシック認証の仕様)。

Authorization: Basic 「base64_encode('user:password')した文字列」

ユーザー名が test、パスワードが hogehoge の場合、base64_encode(‘test:hogehoge’) = dGVzdDpob2dlaG9nZQ== なので、以下のとおり。

Authorization: Basic dGVzdDpob2dlaG9nZQ==

base64エンコードなので、逆算できますね。よく指摘されるところです。

telnetの場合

> telnet test.example.com 80
GET /hoge/ HTTP/1.1
Host: test.example.com
Authorization: Basic dGVzdDpob2dlaG9nZQ==

phpでfsockopenの場合

<?php
$fp = fsockopen('basic.example.com', 80);
fwrite($fp, 'GET /basic/ HTTP/1.1' . "\r\n"
			. 'Host: basic.example.com' . "\r\n"
			. 'Authorization: Basic dGVzdDpob2dlaG9nZQ==' . "\r\n"
			. "\r\n");
fpassthru($fp);

関連するメモ

コメント