php multi curl проблема - PullRequest
       5

php multi curl проблема

1 голос
/ 30 августа 2010

Я хочу получить несколько страниц через curl_exec, первая страница приходит нормально, но все остальные - 302 header, по какой причине?

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, ROOT_URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl); // here good content
curl_close($curl);

preg_match_all('/href="(\/users\/[^"]+)"[^>]+>\s*/i', $content, $p);

for ($j=0; $j<count($p[1]); $j++){
    $new_curl = curl_init();
    curl_setopt($new_curl, CURLOPT_URL, NEW_URL.$p[1][$j]);
    curl_setopt($new_curl, CURLOPT_RETURNTRANSFER, 0);
    $content = curl_exec($new_curl); // here 302    
    curl_close($new_curl);

preg_match('/[^@]+@[^"]+/i', $content, $p2);

}

что-то вроде этого

Ответы [ 2 ]

1 голос
/ 30 августа 2010

Возможно, вы захотите предоставить пример своего кода, чтобы мы могли увидеть, что вы что-то пропускаете.

302 Код ответа обычно указывает, что сервер перенаправляет вас в другое место (находится в Location заголовок ответа).В зависимости от того, какие флаги вы используете, CURL может либо получить это автоматически, либо вы можете следить за ответом 302 и получить его самостоятельно.

Вот как вы можете заставить CURL следовать за перенаправлениями (где $ ch - дескрипторк вашему скручиваемому соединению):

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects 
0 голосов
/ 30 августа 2010

Вы можете использовать curl multi, который работает быстрее и может получать данные со всех URL-адресов параллельно.Вы можете использовать его следующим образом

//Initialize
$curlOptions = array(CURLOPT_RETURNTRANSFER => 1);//Add whatever u additionally want.
$curlHandl1 = curl_init($url1);
curl_setopt_array($curlHandl1, $curlOptions);

$curlHandl2 = curl_init($url2);
curl_setopt_array($curlHandl2, $curlOptions);

$multi = curl_multi_init();
curl_multi_add_handle($multi, $curlHandle1);
curl_multi_add_handle($multi, $curlHandle2);

//Run Handles
$running = null;
do {
  $status = curl_multi_exec($mh, $running);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($running && $status == CURLM_OK) {
  if (curl_multi_select($mh) != -1) {
    do {
      $status = curl_multi_exec($mh, $running);
    } while ($status == CURLM_CALL_MULTI_PERFORM);
  }
}

//Retrieve Results
$response1 = curl_multi_getcontent($curlHandle1);
$status1 = curl_getinfo($curlHandle1);

$response1 = curl_multi_getcontent($curlHandle1);
$status1 = curl_getinfo($curlHandle1);

Более подробную информацию можно найти здесь http://www.php.net/manual/en/function.curl-multi-exec.php Оформить заказ Пример1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...