1

典型的なブラウザベースのユーザーは、サイト (A) にアクセスし、サブページ (B)、別のサブページ (C) にリンクし、最後にページ (D) でのアクティビティを確認します。

これらの最初のステップを curl でシミュレートして、スクリプトを起動するとターゲット ドメインとやり取りし、ユーザーが中間アクションを実行する必要なく (D) に到達するようにしています。

私はcurlの経験があまりなく、最後のページに行くと最後に何かを失敗しているように感じます(明示的に設定したCookieが上書きされるなど)。また、実際に他のサイトにいるのではなく、スクリプトの URL にとどまっています...しかし、Location ヘッダーを使用すると、以前のアクションをさらに確実に無視します。

以下から得られるのは、以前に (A)(B)(C) をヒットしたことを認識せずに (D) にたどり着くことです。

これは私が作業しようとしてきたコードですが、CURLOPT が欠けているのか、それとも私のアプローチでより基本的なものなのかはわかりません。ご指導ありがとうございます。

<?php
$item1=990525;
$item2=208208;
$home="http://www.somedomain.com";
$add=$home."/cart/addSkuByButton.do;jsessionid=0000RSqxtdShvtVm0lVAb29p-9N:1659q38ci?ajaxATCRequest=true&sourcePage=&cmd_addCart.button.INDEX[0]=Add%20to%20Cart&trackingCategory=1000000000&entryFormList[0].selected=on&entryFormList[0].sku=";
$toCart="&entryFormList[0].qty=";
$cart=$home."/cart/shoppingCart.do;jsessionid=0000RSqxtdShvtVm0lVAb29p-9N:1659q38ci";

session_start(); //do I need this?
//setup
$c=curl_init();
curl_setopt($c,CURLOPT_RETURNTRANSFER,true);
curl_setopt($c,CURLOPT_COOKIESESSION,true); //should I use this? I've also tried COOKIEFILE without success
curl_setopt($c,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c,CURLOPT_HEADER, 1);

//set a session ID
curl_setopt($c,CURLOPT_COOKIE, "jsessionid=0000RSqxtdShvtVm0lVAb29p-9N:1659q38ci; path=/; domain=www.somedomain.com");

//visit main domain
curl_setopt($c,CURLOPT_URL, $home);
curl_exec($c);

//programattically visit sub pages
curl_setopt($c,CURLOPT_URL, $add.$item1.$toCart);
curl_exec($c);
curl_setopt($c,CURLOPT_URL, $add.$item2.$toCart);
curl_exec($c);
curl_setopt($c, CURLOPT_RETURNTRANSFER, false);
curl_setopt($c,CURLOPT_HEADER, false);

//actually visit final page
curl_setopt($c,CURLOPT_URL, $cart);
curl_exec($c);
curl_close($c);
?>
4

2 に答える 2

1

ユーザー ナビゲーションを自動化するには、Seleniumを使用します。Selenium を使用すると、多くの頭痛の種が解消され、多くの頭痛の種になりますが、それを行うのに最適なツールです。これは、問題が@Vaughanが言及したものであると想定しています。ただし、そうでない場合でも、Cookie やリターン ヘッダーなど、他にも心配すべきことがたくさんあります。

于 2012-07-28T03:40:12.117 に答える
1

curl は JavaScript を実行しません。これがあなたの問題だと思います。ブラウザー ベースのユーザーがサイトにアクセスすると、ブラウザーの JavaScript インタープリターによって JavaScript が実行されます。curl はプレーン テキストのソース コードを返すだけです。

curl ライブラリはページ内で JavaScript を実行しますか?

于 2012-07-28T03:35:49.363 に答える