Ответы пользователя по тегу PHP
  • Как правильно реализовать многопоточность на PHP?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.
    А это https://github.com/joshfraser/rolling-curl не то же самое на github?
    Ответ написан
    Комментировать
  • Почему рандомно зависает telegram бот при нажатии на кнопках и не работает remove_keyboard?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Вопрос зависания надо смотреть более детально. По части кода этого не понять. Начните с логов вашего сервера.
    По удалению клавиатура: либо смотрите метод ReplyKeyboardRemove, либо, как в случае с inline_keyboard, отправляйте пустой массив:
    $keyboard = array('inline_keyboard' => array());
    $params['reply_markup'] = json_encode($keyboard, TRUE);
    Ответ написан
    Комментировать
  • Как симулировать XHR POST через курл?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Вы можете легко увидеть на какой url идет ajax-запрос.
    Так на этот url отправляйте данные формы (логин/пароль/другие поля, в т.ч. hidden).
    На всякий случай делаете так:
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        "X-Requested-With" => "XMLHttpRequest",
        "Referer" => "http://servername.ru/login"
    ));

    Указываете в заголовках, что это именно ajax и на всякий случай указываете реферер - урл, откуда обычно идет авторизация в браузере.
    Ответ написан
    3 комментария
  • Почему CURL не формирует body?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    1. Сервис ожидает единственное поле file? Других нет?
    2. Если вместо $_FILES[] взять просто какой-то тестовый файл, что лежит, допустим, в одной директории со скриптом?
    3. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true) пробуйте.
    4. Смотрите подробнее curl_getinfo()
    Ответ написан
    2 комментария
  • Чем парсить невалидный 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
    Либо пишите в базу уже канонические урлы.
    Либо пишите, что вводит юзер, но потом тщательно проверяете.
    Пример:
    $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
    День добрый.

    Я бегло посмотрел по вашему вопросу и вот что удалось выяснить.
    При открытии страницы аудиозаписей пользователя выполняется 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.
    Ответ написан
    Комментировать
  • Как имитировать браузер 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);

    и покажите что же там у вас не так работает.
    Ответ написан
  • Как правильно настроить работу скрипта через proxy?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    День добрый.
    Прокси в curl вы отдаете правильно.
    На тему бесплатных прокси от hideme.ru - я сам недавно пытался через них парсить и после теста понял, что из всего списка, реально работали только 2 ip и то недолго. Так что если хотите использовать прокси, но желательно использовать проверенный список, а это как правило платно. И если быть до конца честным - даже платные не всегда работают на 100%, но в целом точно лучше бесплатных.
    Ответ написан
    Комментировать
  • Почему это php код выполняется очень очень долго?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    Я вчера пол-вечера потратил на решение проблемы господина, всё разжевал, выдал рабочий код и вот опять.
    Да смените свой хостинг в конце концов. Ежу понятно, что в нем проблема. Код в норме.
    Ответ написан
    2 комментария
  • Как проверить, что скрипт выполняется через прокси под указанным ip?

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

    Сделать в $url какой-то свой адрес и отправить на него запрос.
    А в файле по этому адресу написать определение IP, например

    function getUserIP()
    {
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote  = $_SERVER['REMOTE_ADDR'];
    
        if(filter_var($client, FILTER_VALIDATE_IP))
            $ip = $client;
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
            $ip = $forward;
        else
            $ip = $remote;
        
        return $ip;
    }
    
    $user_ip = getUserIP();
    echo $user_ip;


    Таки образом в вашей переменной $page будет ответ с IP адресом.
    Ответ написан
    Комментировать