人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのCookieについて質問です。

現在フォームページにアクセスして、サーバーに情報を送信するという作業を行いたいと考えています。

具体的にはオークションのページ(ヤフオク)に自動的にログインしたいと考えております。

ログインしたいページは


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点がよく分かりません。

自分でこうすればうまくいくのではないか?
というコードをコメントに書いたのでもしよければ見ていただいて、ご回答いただければと考えています。

お手数をおかけしますが、わかるかたおりましたらご回答をよろしくお願いいたします。







●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:cookie Pear PHP アクセス オークション
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●100ポイント ベストアンサー

こんなコードでログインできます。

<?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が返してくれないようです。


何かの参考になれば。

◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ