読者です 読者をやめる 読者になる 読者になる

PHPでヤフーにログインする。

2012.07.02 PHPでヤフーにログインする - Digitarhythm
こちらでアップデートしました

以下昔の内容です

早々と使えなくなりました・・・。*1悲しい・・・。


PHPでYahooにログイン出来なくなったでも書きましたが書きなおしたので公開します。継承とかいまだによく分からないですが、すこしは綺麗になったでしょうか・・・。原因はここの通り*2「ログイン時のクッキーを取得して再度ログイン画面を開く」というのを追加したところログインできました。

ここで取得したクッキーを使用すればログイン状態でページ情報が取得できます。

<?php
require_once 'HTTP/Request.php';

PEAR::setErrorHandling(PEAR_ERROR_DIE);

class yahooBlog extends HTTP_Request {
  
  function init() {
    parent::__construct();
    $this->addHeader('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729)');
    $this->addHeader('Keep-Alive', 115);
    $this->addHeader('Connection', 'keep-alive');
    $this->addHeader('Referer', 'https://login.yahoo.co.jp/config/login?');
  }

  // ログインしクッキーを返す
  function login($id, $pw) {
    $this->init();
    $this->setURL('https://login.yahoo.co.jp/config/login?');

    // リクエスト
    $this->sendRequest();
    // HTMLソースの取得
    $html = $this->getResponseBody();    
    // ログイン時のクッキーを取得し再度ログイン画面を開く
    $cookies = $this->getResponseCookies();
    foreach ($cookies as $cookie)  $this->addCookie($cookie['name'], $cookie['value']);

    // リクエスト
    $this->sendRequest();
    // HTMLソースの取得
    $html = $this->getResponseBody();
    // POSTする項目とデータをを取得
    preg_match_all('/<input type="hidden" name="(.*?)" value="(.*?)">/', $html, $matches, PREG_SET_ORDER);
    // 認証ページを開く
    $this->setURL('https://login.yahoo.co.jp/config/login?');
    // POSTデータのセット
    $this->setMethod(HTTP_REQUEST_METHOD_POST);
    foreach ($matches as $entry) $this->addPostData($entry[1], $entry[2]);
    // IDとパスワードのセット
    $this->addPostdata('login', $id);
    $this->addPostdata('passwd', $pw);
    // ログイン状態を保存
    $this->addPostdata('.persistent', 'y');

    // リクエスト
    $this->sendRequest();
    // Cookieの取得
    $cookies = $this->getResponseCookies();
    if (empty($cookies)) {
      echo 'Cannot log in.';
      echo $this->getResponseBody();
      exit;
    }  else {
      return $cookies;
    }
  }
?>

*1:[http://d.hatena.ne.jp/comeonly/20110615:title=ヤフーとログインのイタチごっこ]

*2:[http://pg-memo.blogspot.com/2011/05/yahoo.html:title=WEBプログラマの雑記帳: プログラムからYahooにログインする際に、不正アクセス防止機能により文字認証画面が出た時の対処法]