• Почему CURL не формирует body?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Сервис ожидает единственное поле file? Других нет?
    2. Если вместо $_FILES[] взять просто какой-то тестовый файл, что лежит, допустим, в одной директории со скриптом?
    3. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true) пробуйте.
    4. Смотрите подробнее curl_getinfo()
    Ответ написан
    2 комментария
  • Как такое может быть?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.
    Причина в JS.
    Используйте PhantomJS или анализируйте, что происходит в недрах JS-кода сайта.
    Ответ написан
    3 комментария
  • Чем парсить невалидный HTML?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Tidy. И не нужно искать альтернатив.
    Вот, к примеру, один из моих вариантов использования.
    $options = 	array("indent" => false, 
    				"output-xml" => true, 
    				"clean" => true,
    				"drop-proprietary-attributes" => true,
    				"drop-font-tags" => true,
    				"drop-empty-paras" => true,
    				"hide-comments" => true,
    				"join-classes" => true,
    				"join-styles" => true,
    				"show-body-only" => false); 
    							
    $tidy = new tidy();
    $str = $tidy->parseString($page, $options, 'utf8'); // $page содержит невалидный html
    $tidy->cleanRepair();
    echo $tidy; // валидный html

    Со списком опцийсоветую поиграться самостоятельно.
    Ответ написан
    Комментировать
  • Проблемы с кодировкой или сжатием gzip?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Здесь нет никаких проблем. Это специфика кодирования символов в json. Делайте json_decode() и смотрите данные хотя бы через var_dump(). Увидите, что там все в порядке.
    Ответ написан
  • Почему не корректно работает функция append в Jquery?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    С функцией append проблем нет.
    Вы бы хоть ради интереса посмотрели что у вас внутри inputData в итоге получается прежде чем на append() пенять.
    Перепишите код для присвоения значения inputData.
    Ответ написан
    Комментировать
  • Как fsockopen заменить на curl?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Сначала выясните - у вас в принципе curl работает или нет.
    2. Вот самый простой пример отправки POST данных курлом
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://someurl.com/post/');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'postvar1=value1&postvar2=value2&postvar3=value3');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec ($ch);
    curl_close ($ch);
    Ответ написан
    1 комментарий
  • Как подключиться по CURL к админке Битрикса?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Вы говорите, что успешно заходите на "стартовую страницу админки", это значит, что вы уже авторизовались без проблем. Отсюда вопрос - а зачем вы POST запрос отправляете тогда?
    Если авторизовались, то делайте обычный GET-запрос по нужному урл и дальше уже надо смотреть.

    Если же по стартовой страницей админки вы имеете ввиду страницу авторизации (что странно), то вы POST-запрос должны отправлять на /bitrix/admin/, а не на bitrix/admin/perfmon_panel.php.
    Ответ написан
  • Как быстро сравнить две разные ссылки на одинаковый адрес без curl?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Либо пишите в базу уже канонические урлы.
    Либо пишите, что вводит юзер, но потом тщательно проверяете.
    Пример:
    $url = strpos($url, "//") === false ? '//' . $url : $url; // если указана схема http или https
    $url = str_replace('www.', '', $url);  // если можете пренебречь www
    $host = parse_url($url, PHP_URL_HOST); // получаете чистый хост


    На выходе получите в $host чистый ecco-shoes.ru (либо men.ecco-shoes.ru, например).
    Дальше SQL
    SELECT * FROM `table_name` WHERE url LIKE "%ecco-shoes.ru%"

    Получите все варианты записей с этим хостом в каком бы он страшном и неканоническом виде ни был записан.

    НО! Я лишь сделал проверку на http(s) и www, в реальности гораздо больше моментов надо учитывать, так что не стесняйтесь дорабатывать код под свои нужды.
    Ответ написан
    Комментировать
  • Как авторизоваться на videoigr.net с помощью PHP/cURL?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Получаете curl'ом страницу http://videoigr.net/login.php
    2. Находите form, у которой name="login" и забираете оттуда значение action, например
    http://videoigr.net/login.php?action=process&osCsid=e1caaae9002758dc6bcbdc7179c14d82
    - osCsid скорее всего играет роль (а, может, и нет. надо экспериментировать)
    3. На полученный из action адрес отправляете post-запрос с полями email_address и password
    Всё.

    Важные моменты:
    • Используя CURLOPT_FOLLOWLOCATION равным 1, после авторизации вас сразу редиректнет скорее всего в личный кабинет. Если нет - сделаете новый запрос по нужному адресу.
    • curl сохранит куки сам
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // сохранять куки в файл
    curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt'); // считываем куки
    Ответ написан
    2 комментария
  • Какая разница между CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR в curl?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    CURLOPT_COOKIEJAR - файл, куда пишутся куки после закрытия коннекта, например после curl_close()
    CURLOPT_COOKIEFILE - файл, откуда читаются куки.

    Так что используйте оба параметра, не ошибетесь.
    Но вообще документация - сильная штука.
    Ответ написан
    Комментировать
  • Можно ли в curl передать высоту экрана в заголовке?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Отвечая на ваш вопрос - нет, разрешение экрана через curl передать нельзя.
    И мой ответ на ваш предыдущий вопрос все еще актуален.
    Ответ написан
  • Как получить данные по Curl со страницы где есть подгрузка при скролинге?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Я бегло посмотрел по вашему вопросу и вот что удалось выяснить.
    При открытии страницы аудиозаписей пользователя выполняется POST-запрос на https://vk.com/al_audio.php такого формата:
    act:load_silent
    al:1
    album_id:-2
    band:false
    owner_id:3118730

    А в ответ приходит огромный ответ где (внимание) есть список всех композиций - его надо только распарсить правильно.
    Это я к тому, что при скролинге списка аудио доп. запросов на сервер не отправляется.
    Так что экспериментируйте.
    Ответ написан
  • Где ошибка в коде?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Пробуйте самый базовый вариант, потом определяйте где именно проблема.
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'https://ru.sitename.com/');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    $out = curl_exec($curl);
    curl_close($curl);


    И не поленитесь посмотреть curl_getinfo();
    Ответ написан
    Комментировать
  • Авторизация с помощью cUrl. В чём ошибка?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    XSRF (он же CSRF) ключ генерируется и сохраняется на стороне сервера (вероятно, в сессии), это нормально, но для этого и нужен.
    Логика скрипта должна быть такой:
    1. Скрип получает страницу авторизации
    2. Берет значение XSRF-поля
    3. Отправляет все данные для авторизации.

    Все это должно делаться в рамках одной сессии скрипта.
    Попробуйте объект curl перед отправкой данных авторизации создать новый. Из вашего кода создается ощущение, что вы используете один и тот же объект и для получения данных и для отправки данных авторизации.
    Ну и в панели разработчика Хрома или Firefox проверьте - точно ли отправляются только эти 3 поля или сервер "ждет" еще какое-то поле, значение которого генерируется через JS. Проверить просто - отключите JS и попробуйте авторизоваться на сайте.
    Ответ написан
    2 комментария
  • Как с помощью php-curl создать пустой файл на ФТП?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Команды создания файла у FTP нет. Вам придется отправлять файл с помощью curl.
    Ответ написан
    Комментировать
  • Как в Grab вытащить ссылку по тексту ссылки в ответе?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    В grab, вроде можно, xpath скормить, так что вот пример:
    //a[contains(text(), "текстссылки")]

    Пробуйте.
    Ответ написан
    3 комментария
  • Как спарсить дочерние элементы в Nokogiri?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.

    Если Nokogiri умеет с xpath, то вот так получите все name
    //tr[td[@class="parse this"]]/td[@class="name"]

    По аналогии найдете count. Xpath рулит.
    Ответ написан
    Комментировать
  • Как можно избежать бана по IP при парсинге сайта?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Использовать прокси (желательно платные, но и с ними проблемы тоже могут быть)
    2. Увеличивать таймаут между запросами.
    Ответ написан
    Комментировать
  • Как имитировать браузер curl на aliexpress?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Браузер могут имитировать только headless-браузеры, например PhantomJS или CasperJS
    2. Подставлять cookies так нельзя, используйте дополнительно еще директиву CURLOPT_COOKIEJAR с тем же значением $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'
    3. А вот CURLOPT_COOKIE в вашем случае надо убрать.
    4. curl хорош в парсинге простых сайтов, которые не имеют защит от парсинга. Так что в случае с Aliexpress советую смотреть всё же пункт 1.
    Ответ написан
    Комментировать
  • Как заставить работать curl и simple html dom вместе?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Включите в самом начале файла вывод ошибок
    error_reporting(E_ALL); 
    ini_set("display_errors", 1);

    и покажите что же там у вас не так работает.
    Ответ написан