【php】ベーシック認証のかかっているWebページの内容を取得する
問題
あるWebページの内容を取得したかったのですが、ベーシック認証がかかってました。
どうやって取得したらよいでしょうか。
答え
まずお手軽には、URLにIDとパスワードを含めてしまえば、file_get_contents()できる。
file_get_contents('http://user:password@example.com/hoge/fuga');
他に、
- phpでfsockopenなどを使ってHTTP通信をする場合
- telnetで手入力でHTTPをしゃべる場合
など、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);
コメント