@user0name0

Почему curl внутри foreach не работает?

Пишу парсер, использую curl. Скрипт получает группу ссылок с нужной страницы (используя curl и регулярки) и записывает их в массив $match, далее такой код:
foreach ($match[0] as $url) {
//echo $url: - проверка. Выводит url.
$curl = curl_init();
curl_setopt($curl, CURLOPT_PROXY, "127.0.0.1:9050"); // Использую Tor-прокси.
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_URL, 'https://'.$url);  // Если писать вручную, без foreach, то работает.
$urlcont = curl_exec($curl); 
var_dump($urlcont); }
Все ссылки рабочие, но var_dump выводит string(0) "". Причем выводит не false - ошибок нет.
Что интересно, если взять любую ссылку из массива и вне foreach вставить в CURLOPT_URL, то всё отлично работает. Проблема возникает именно при переборе массива.
Я пробовал ставить задержки, использовать multiCURL, посылать useragent, использовать куки - полный ноль.
URL вида site.com/index.php?page=post&id=43 - я думал, что дело в пост-запросе и даже отправлял его через CURLOPT_POSTFIELDS, но снова не то.
  • Вопрос задан
  • 540 просмотров
Решения вопроса 1
@user0name0 Автор вопроса
Заменил:
curl_setopt($curl, CURLOPT_URL, 'https://'.$url);
На:
curl_setopt($curl, CURLOPT_URL, htmlspecialchars_decode('https://'.$url));
Не знаю, почему и как ссылки кодируются, но главное, что теперь всё работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
gobananas
@gobananas
finishhim.ru
Данных недостаточно, надо видеть структуру массива $match[0] как минимум.
А вообще говорю заранее - всё работает, ищите ошибку.
P.S. Сделайте внутри for ради интереса, там работает, я проверял ))
Ответ написан
lidacriss
@lidacriss
wtf
curl_setopt($curl, CURLOPT_URL, 'https://'.$url;

вероятно, здесь должно быть как минимум
curl_setopt($curl, CURLOPT_URL, 'https://' . $url);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы