現在フォームページにアクセスして、サーバーに情報を送信するという作業を行いたいと考えています。
具体的にはオークションのページ(ヤフオク)に自動的にログインしたいと考えております。
ログインしたいページは
https://login.yahoo.co.jp/config/login?.src=auc&.intl=jp&.pd=&.partner=&.protoctl=&.done=http%3A//auctions.yahoo.co.jp/jp
のページで、
このページにIDとPWを入力してログインしたいと考えています。
前回少し回答を頂き自分でPearを用いたやり方を今回考えてみました。
しかし、未だにうまく出来ず困っております。
分からない点ですが
サーバーからクッキーを返してもらった後に
①Pearを使って、どのようにデータを送る準備をするのか?
②Pearを使って、実際にどのようにデータをサーバーに送信するか?
この2点がよく分かりません。
自分でこうすればうまくいくのではないか?
というコードをコメントに書いたのでもしよければ見ていただいて、ご回答いただければと考えています。
お手数をおかけしますが、わかるかたおりましたらご回答をよろしくお願いいたします。
こんなコードでログインできます。
<?php require_once 'HTTP/Request.php'; $id = 'ユーザID'; $pw = 'パスワード'; $url = 'https://login.yahoo.co.jp/config/login?.src=auc&.intl=jp&.pd=&.partner=&.protoctl=&.done=http%3A//auctions.yahoo.co.jp/jp'; $request =& new HTTP_Request(); $request->setURL($url); $request->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)'); $request->addHeader('Keep-Alive', 300); $request->addHeader('Connection', 'keep-alive'); $response = $request->sendRequest(); if (PEAR::isError($response)) { echo $response->getMessage(); exit; } $html = $request->getResponseBody(); preg_match('/<img width=1 height=1 alt="" src="(.*?)">/is', $html, $matches); $burl = $matches[1]; $request->setURL($burl); $request->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)'); $request->addHeader('Referer', $url); $request->addHeader('Keep-Alive', 300); $request->addHeader('Connection', 'keep-alive'); $response = $request->sendRequest(); if (PEAR::isError($response)) { echo $response->getMessage(); exit; } $cookies = $request->getResponseCookies(); preg_match_all('/<input type="hidden" name="(.*?)" value="(.*?)">/', $html, $matches, PREG_SET_ORDER); $request->setURL('https://login.yahoo.co.jp/config/login?'); $request->setMethod(HTTP_REQUEST_METHOD_POST); $request->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)'); $request->addHeader('Referer', $url); $request->addHeader('Keep-Alive', 300); $request->addHeader('Connection', 'keep-alive'); foreach ($cookies as $cookie) { $request->addCookie($cookie['name'], $cookie['value']); } foreach ($matches as $entry) { $request->addPostData($entry[1], $entry[2]); } $request->addPostdata('login', $id); $request->addPostdata('passwd', $pw); $response = $request->sendRequest(); if (PEAR::isError($response)) { echo $response->getMessage(); exit; } print_r ($request->getResponseCookies()); exit; ?>
最後に出力しているCookieを使えば、オークションのサイトにアクセスできると思います。
このコードに行きついた方法ですが、FireFoxのLive HTTP Headerプラグインを使って、実際のブラウザの動作と同じことをHTTP_Requestにやらせました。なので、無駄な部分があるかもしれません。
ちなみにCookieが取得できなかったのは、UserAgentの指定を見て、Yahooが返してくれないようです。
何かの参考になれば。
ご回答ありがとうございます。