phpの擬似ブラウザライブラリSnoopyで、AmazonアソシエイトセントラルにGETとかPOSTとかしたいんですが、失敗してしまします。


理由はどうしてでしょうか?どうすれば成功しますか?
また、こういたった場合、どのようにエラーを見つけて対策すればよいのでしょうか?

PHPは稚拙な独学で、こういった場合の対策方法を知りません。ご教示お願いします。

$snoopy = new Snoopy();

$amazonurl = "https://affiliate.amazon.co.jp/gp/associates/login/login.html/" ;

$snoopy->fetch($amzonurl);
$response = $snoopy->results;

if( ! $snoopy->fetch($amzonurl) ) {
$error = " Failed ";
print $error;
}
else {
print $response;
}

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2008/05/10 23:54:28
  • 終了:2008/05/17 23:55:05

ベストアンサー

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/05/11 09:00:30

ポイント35pt

Amazonアフィリエイトのログイン画面はSSL通信で、かつ証明書の受け入れを要求しているので、Snoopy を適用するのは難しいかもしれません。


Snoopy は cURL ライブラリを使って SSL 通信を実装しています。

cURL ライブラリがあることと、Snoopy の $curl_path 変数に cURL ライブラリへのパスが通っていることが必要です。


次に、証明書の受け入れを要求への対応が必要なのですが、直接 cURL に指定する方法が分かりません。cURL のバージョンによって違うという話を聞いたことがありますが‥‥。


代替策として、CURL, Client URL Library 関数(cURLを PHP からコールできるようにした関数群;curl 関数群がコンパイルされていることが必要)で、ご質問のログインページを取得する方法を紹介します。

<?php
$url = 'https://affiliate.amazon.co.jp/gp/associates/login/login.html/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //サーバ証明書検証をスキップ
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  //  〃
$result = curl_exec($ch);
curl_close($ch);
echo $result; 
?>
id:rui_mashita

ありがとうございます。なるほど、cURL のバージョンによって違うとか、SSLと証明書うんぬんをSnoopyでやるのは初心者には敷居が高そうですね。

Snoopy以外の方法でやるのが手っ取り早そうですが(PEAR::HTTP_Clientでの成功例が公開されてる)、これを機会にcURLについても学んでみて、なんとかSnoopyで実装出来ないのか、引き続き試みてみます。

2008/05/12 02:31:59

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/11 00:26:59

ポイント35pt

質問にある AmazonアフィリエイトのログインID/パスワード渡しがどのような手順で行われるのか分かりませんが、Snoopy で x=123, y=456 を GET または POST で渡すには次のようにします。


GET渡しの場合

$url = "http://www.hogehoge.jp/hoge.html?x=123&y=456";
$snoopy->fetch($url);
$response = $snoopy->results;

POST渡しの場合

$url = "http://www.hogehoge.jp/hoge.html
$vars['x'] = 123;
$vars['y'] = 456;
$snoopy->submit($url, $vars);
$response = $snoopy->results;
id:rui_mashita

Amazonアフィリ以外の他のサイトでは、おっしゃる通りの方法で成功するのですが、何故かうまくいきません。

ログインID/パスワードを渡す前の"https://affiliate.amazon.co.jp/gp/associates/login/login.html/"でさえも、fetch出来ないのです

2008/05/11 02:47:43
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/05/11 09:00:30ここでベストアンサー

ポイント35pt

Amazonアフィリエイトのログイン画面はSSL通信で、かつ証明書の受け入れを要求しているので、Snoopy を適用するのは難しいかもしれません。


Snoopy は cURL ライブラリを使って SSL 通信を実装しています。

cURL ライブラリがあることと、Snoopy の $curl_path 変数に cURL ライブラリへのパスが通っていることが必要です。


次に、証明書の受け入れを要求への対応が必要なのですが、直接 cURL に指定する方法が分かりません。cURL のバージョンによって違うという話を聞いたことがありますが‥‥。


代替策として、CURL, Client URL Library 関数(cURLを PHP からコールできるようにした関数群;curl 関数群がコンパイルされていることが必要)で、ご質問のログインページを取得する方法を紹介します。

<?php
$url = 'https://affiliate.amazon.co.jp/gp/associates/login/login.html/';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //サーバ証明書検証をスキップ
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  //  〃
$result = curl_exec($ch);
curl_close($ch);
echo $result; 
?>
id:rui_mashita

ありがとうございます。なるほど、cURL のバージョンによって違うとか、SSLと証明書うんぬんをSnoopyでやるのは初心者には敷居が高そうですね。

Snoopy以外の方法でやるのが手っ取り早そうですが(PEAR::HTTP_Clientでの成功例が公開されてる)、これを機会にcURLについても学んでみて、なんとかSnoopyで実装出来ないのか、引き続き試みてみます。

2008/05/12 02:31:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません