curl模拟用户行为

时间:2012-07-28 03:06:38

标签: php cookies curl

典型的基于浏览器的用户访问网站(A),然后链接到某个子页面(B),然后链接到另一个(C),最后在页面(D)上查看他们的活动

我正在尝试通过curl模拟这些第一步,以便在触发我的脚本时,它与目标域交互,并且用户最终(D)而不需要采取中间操作。

我对卷曲没有多少经验,当我进入最后一页(我明确设置的cookie被覆盖等)时,我感觉到最后我蠢蠢欲动。我也留在我的脚本的URL而不是真正在其他网站上......但如果我使用Location头,我更肯定会忽略之前的行为。

我从下面得到的是我最终得到(D)而没有认识到曾经击中过(A)(B)(C)

这是我一直试图使用的代码,但我不确定我是否缺少一些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);
?>

2 个答案:

答案 0 :(得分:1)

curl不会执行任何javascript,我猜是你的问题。当基于浏览器的用户访问网站时,javascript由浏览器javascript解释器执行。 curl将只返回纯文本源代码。

Does the curl library execute javascript inside pages?

答案 1 :(得分:1)

为了自动化用户导航,我会使用Selenium它会为您节省许多麻烦并给您带来很多麻烦,但它是最好的工具。这假设问题是@Vaughan所提到的。但是,即使不是这样,还有许多其他事情需要担心,比如cookie和返回标题。