1

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

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

我对 curl 没有太多经验,当我进入最后一页时,我有一种感觉,我在最后搞砸了一些东西(我明确设置的 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);
?>
4

2 回答 2

1

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

curl 库是否在页面内执行 javascript?

于 2012-07-28T03:35:49.363 回答
1

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

于 2012-07-28T03:40:12.117 回答