-2

我正在使用此代码,但它不起作用。请帮忙

$url = "http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472";
$file=file_get_contents($url);
preg_match("#.*?#mis", $file, $arr_viewstate);
$viewstate = urlencode($arr_viewstate[1]);
$eventvalidation = urlencode($arr_viewstate[2]);
$options = array(
    CURLOPT_RETURNTRANSFER => true, // return web page
    CURLOPT_HEADER => false, // don't return headers
    CURLOPT_ENCODING => "", // handle all encodings
    CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7'", // who am i
    CURLOPT_AUTOREFERER => true, // set referer on redirect
    CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
    CURLOPT_TIMEOUT => 1120, // timeout on response
    CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
    CURLOPT_POST => true,
    CURLOPT_VERBOSE => true,
    CURLOPT_POSTFIELDS => '__EVENTTARGET='.urlencode('ctl00$ContentPlaceHolderBody$SearchPageNavigationTop$rptPager$ctl01').'&__EVENTARGUMENT='.urlencode('').'&__VIEWSTATE='.$viewstate.'&__EVENTVALIDATION='.$eventvalidation.'&__LASTFOCUS='.urlencode('')
);

$ch = curl_init($url);
curl_setopt_array($ch,$options);
4

2 回答 2

2

事实是我不明白你想要达到什么,但我绝对知道那不是获得__VIEWSTATE__EVENTVALIDATION

它应该是这样的

$url = "http://www.riogrande.com/Category/Findings-and-Finished-Jewelry/132/Bails-and-Enhancers/472";
$html = file_get_contents($url);

preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~',$html,$viewstate);
preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~',$html,$eventvalidation);

$viewstate = $viewstate[1];
$eventvalidation = $eventvalidation[1] ;

var_dump($viewstate,$eventvalidation);
于 2012-10-06T10:05:26.480 回答
0

此代码似乎正在工作...将该代码粘贴到空白 php 文件中,我得到目标 URL 的内容。但是,图像已损坏,样式表未提取,javascript 不起作用。

像这样抓取整个网页的问题,尤其是使用相对 URL、图像、CSS、JavaScript 等的网页将无法按预期工作。

如果您坚持抓取页面并吐出结果,请尝试将最后几行代码替换为如下所示:

$result = curl_exec($ch); 
curl_close($ch);

$result = str_replace("../../../../","http://www.riogrande.com/",$result);
echo $result;

我只是碰巧注意到相对 URL 以开头,../../../../因此使它们成为绝对 URL 可能有助于正确加载图像。

于 2012-10-06T09:52:52.490 回答