php, Curl error: Illegal characters found in URL

370
23 мая 2017, 04:32
<?php
function getUrl($inputSearchPostArray) {
    if (is_array($inputSearchPostArray)) {
        $inputSearchPostString = http_build_query($inputSearchPostArray);
    } else {
        $inputSearchPostString = $inputSearchPostArray;
    }
    $userAgent      = 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0';
    $cURL = curl_init();
    curl_setopt($cURL, CURLOPT_URL,             "https://www.avito.ru/search");
    curl_setopt($cURL, CURLOPT_HEADER,          TRUE);
    curl_setopt($cURL, CURLOPT_USERAGENT,       $userAgent);
    curl_setopt($cURL, CURLOPT_TIMEOUT,         10);
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER,  TRUE);
    curl_setopt($cURL, CURLOPT_POST,            TRUE);
    curl_setopt($cURL, CURLOPT_POSTFIELDS,      $inputSearchPostString);
    curl_setopt($cURL, CURLOPT_AUTOREFERER,     TRUE);
    $answerFromServer = curl_exec($cURL);
    if (curl_getinfo($cURL, CURLINFO_HTTP_CODE) != 301) {
        return FALSE;
    }
    $outputUrl = substr($answerFromServer, stripos($answerFromServer, "Location: ") + 10);
    $outputUrl = substr($outputUrl, 0, strpos($outputUrl, "X-Frame-Options:") - 1);
    return 'https://www.avito.ru'.$outputUrl;
}
$test = getUrl($_POST);
echo $test;
$userAgent      = 'Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0';
$cURL           = curl_init();
curl_setopt($cURL, CURLOPT_URL,             $test);
curl_setopt($cURL, CURLOPT_HEADER,          TRUE);
curl_setopt($cURL, CURLOPT_USERAGENT,       $userAgent);
curl_setopt($cURL, CURLOPT_TIMEOUT,         10);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER,  TRUE);
$answerFromServer = curl_exec($cURL);
if ($answerFromServer === false)
{
  throw new Exception('Curl error: ' . curl_error($cURL));
}
 ?>

Функция ровно работает, она ринимает пост запрос который авито отправляет на свои сервера при нажатии кноки найти. Решил затестить. Вот вывод.

https://www.avito.ru/ekaterinburg/avtomobili/s_probegom/bmw/m3?pmax=15000000&pmin=15000&metro=2039-2041-2044&f=188_0b893.1375_0b15524.187_866-869.185_861.186_864.1374_15786b15800.695_8852&i=1
Fatal error: Uncaught Exception: Curl error: Illegal characters found in URL in /root/sites/avito.bot/search.php:58 Stack trace:#0 {main} thrown in /root/sites/avito.bot/search.php 58

Не могу понять какие символы ему не нравятся. В браузере ссылка открывается.

Answer 1

Ошибку исправил. Когда функция вычленяла ссылку из страницы с редиректом, то захватывала пробел, а с ним походу еще какие-то скрытые знаки.

READ ALSO
Как узнать откуда идет запрос PHP

Как узнать откуда идет запрос PHP

И так, есть 3 файла:

240
Достать параметры из массива php, json_decode

Достать параметры из массива php, json_decode

Здравствуйте мне нужно достать эти параметры(на скрине) как правильно это сделать ?

199
Авторизация пользователя Facebook вручную

Авторизация пользователя Facebook вручную

Отправляю первоначальный запрос

294
Сохранить страницу в html

Сохранить страницу в html

Нужно сохранить страницу по url в html-файлСохраняю так:

285