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

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;
}

●質問者: rui_mashita
●カテゴリ:ウェブ制作
✍キーワード:Amazonアソシエイト PHP print Response エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

質問にある 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;
◎質問者からの返答

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

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


2 ● pahoo
●35ポイント ベストアンサー

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; 
?>
◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



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