我正在使用cUrl POST到网页(非本地),然后返回html。
我需要多次执行此操作,因此cUrl代码处于while循环中。这是奇怪的事情:它第一次按预期工作,但似乎并不是每次都清除POST缓冲区。 (我做close_curl($ ch)。通过POST传递的所有数据都是正确的。)
例如,其中一个文本字段应该是(并且第一次)是“ANY”。但第二次通过“任何,任何”。
我是否纠正这个问题在于未清除的POST缓冲区?我该如何解决?
抱歉:这是代码的缩短版本......
$someResults = mysql_query($someSQL);
while($record = mysql_fetch_array($alertResults)){
$url = "http://something.com/searchResults.asp";
$someV = "Hi";
$fields = array(
//date to post.
);
foreach($fields as $key=>$value){
$fields_string .= $key .'='. $value . '&';
}
rtrim($fields_string,'&');
$ch = curl_init();
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
curl_setopt($ch,CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
ob_start();
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$resultTable = $xpath->evaluate("/html/body//table");
}
而且,当我这样做时,第一次通过循环$ resultTable有60个项目。但每次在那之后(使用相同的url)它有0项。而且我很确定这是因为POST缓冲区没有被清除,所以事情会在以前的POST数据上发布。
每次循环时如何清除POST数据?
答案 0 :(得分:1)
您似乎忘了重置$fields_string
,所以试试这个
...
curl_close($ch);
unset($fields_string);
...