PHP / Curl - буфер Loop & POST не очищается - PullRequest
1 голос
/ 23 декабря 2010

Я использую cUrl для POST на веб-странице (не локальной), а затем возвращаю HTML.

Мне нужно сделать это несколько раз, поэтому код cUrl находится в цикле while. Вот странная вещь: в первый раз она работает как положено, но, похоже, не очищает буфер POST каждый раз после этого. (Я делаю close_curl ($ ch). И все данные, прошедшие через POST, верны.)

Например, одно из текстовых полей должно быть (и, в первый раз, это) передать "ЛЮБОЙ". Но второй раз это проход "ЛЮБОЙ, ЛЮБОЙ".

Правильно ли я понимаю, что эта проблема лежит в не очищенном буфере 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 каждый раз через цикл?

1 Ответ

1 голос
/ 24 декабря 2010

Вы, кажется, забыли сбросить $fields_string, поэтому попробуйте это

...
curl_close($ch);
unset($fields_string);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...