理由はどうしてでしょうか?どうすれば成功しますか?
また、こういたった場合、どのようにエラーを見つけて対策すればよいのでしょうか?
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;
}
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; ?>
質問にある AmazonアフィリエイトのログインID/パスワード渡しがどのような手順で行われるのか分かりませんが、Snoopy で x=123, y=456 を GET または POST で渡すには次のようにします。
$url = "http://www.hogehoge.jp/hoge.html?x=123&y=456"; $snoopy->fetch($url); $response = $snoopy->results;
$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出来ないのです
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で実装出来ないのか、引き続き試みてみます。
ありがとうございます。なるほど、cURL のバージョンによって違うとか、SSLと証明書うんぬんをSnoopyでやるのは初心者には敷居が高そうですね。
Snoopy以外の方法でやるのが手っ取り早そうですが(PEAR::HTTP_Clientでの成功例が公開されてる)、これを機会にcURLについても学んでみて、なんとかSnoopyで実装出来ないのか、引き続き試みてみます。