cURL и proxy

Тема в разделе "PHP", создана пользователем b7music, 24 апр 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. b7music

    b7music

    Регистр.:
    2 ноя 2015
    Сообщения:
    512
    Симпатии:
    230
    Добрый день. В связи с блокировкой телеги, решил использовать через прокси.
    Добавил соответствующие настройки, однако сообщения не уходят.
    Код:
    public static function executeCurl($action, array $data = null)
        {
            //++ proxy
            $proxy = 'okgbpb.tgvpnproxy.me:1080';
            $proxyauth = 'telegram:telegram';
            //-- proxy
           
            $ch = curl_init();
            $curlConfig = array(
                CURLOPT_URL            => 'https://api.telegram.org/bot' . self::$telegram->getApiKey() . '/' . $action,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                //CURLOPT_SAFE_UPLOAD    => true,
                CURLOPT_SSL_VERIFYPEER => false,
               
            );
           
            if (!empty($data)) {
                $curlConfig[CURLOPT_POSTFIELDS] = $data;
            }
            curl_setopt_array($ch, $curlConfig);
           
            //++ proxy
            curl_setopt($ch, CURLOPT_PROXY, $proxy);     // PROXY details with port
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);   // Use if proxy have username and password
            curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
            //-- proxy       
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        } 
    Подскажите, где ошибся?
    Сам прокси 100% рабочий, cURL на сервере установлен и работает.
    В логах пусто, ошибок нет.
     
  2. b7music

    b7music

    Регистр.:
    2 ноя 2015
    Сообщения:
    512
    Симпатии:
    230
    Затем идет функция
    Код:
        public static function send($action, array $data = null)
        {
            $bot_name = self::$telegram->getBotName();
    
            if (defined('PHPUNIT_TESTSUITE')) {
                $fake_response = self::generateGeneralFakeServerResponse($data);
                return new ServerResponse($fake_response, $bot_name);
            }
            $response = json_decode(self::executeCurl($action, $data), true);
            var_dump($response);
            //ignore media messages
            $ignore_array=array('forward_from', 'forward_from_chat', 'reply_to_message', 'audio', 'document', 'photo', 'sticker', 'video', 'voice', 'caption', 'contact', 'location', 'venue', 'new_chat_member', 'left_chat_member', 'new_chat_title', 'new_chat_photo', 'delete_chat_photo', 'group_chat_created', 'supergroup_chat_created', 'channel_chat_created', 'migrate_to_chat_id', 'migrate_from_chat_id', 'pinned_message');
            foreach($response[result] as $key=>$message){
                if (!isset($message['message'])) unset($response[result][$key]);
                foreach($ignore_array as $type)
                    if(isset($message['message'][$type]))
                        unset($response[result][$key]);
            }
            return new ServerResponse($response, $bot_name);
        }
    И в $response у меня приходит NULL
    Screenshot_1.png
     
    Последнее редактирование: 25 апр 2018
  3. borodatych

    borodatych Постоялец

    Регистр.:
    24 июн 2016
    Сообщения:
    125
    Симпатии:
    75
    Может у вас старый PHP и в ответе есть кирилица, от чего json_decode возвращает пусто?
     
  4. b7music

    b7music

    Регистр.:
    2 ноя 2015
    Сообщения:
    512
    Симпатии:
    230
    php не старый,
    PHP Version 7.0.26
    До того момента пока телеграм не забанили, работал без прокси, и все отправлялось.
    Пробовал разные прокси серверы.
    Первую функцию уже пробовал и так переделать
    Код:
    public static function executeCurl($action, array $data = null)
        {
      
      
            $ch = curl_init();
            $curlConfig = array(
                CURLOPT_URL            => 'https://api.telegram.org/bot' . self::$telegram->getApiKey() . '/' . $action,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_PROXY, "socks5://80.211.22.159:1080",
                CURLOPT_SSL_VERIFYPEER => false,
    
            );
    
      
            if (!empty($data)) {
                $curlConfig[CURLOPT_POSTFIELDS] = $data;
            }
    
            curl_setopt_array($ch, $curlConfig);
    
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }
    Screenshot_2.png

    p.s. включил отладку,
    json_last_error
    - Синтаксическая ошибка, не корректный JSON

    Подскажите, что не так
    в $data
    Код:
    array(3) { ["chat_id"]=> string(9) "132949862" ["action"]=> string(6) "typing" ["text"]=> string(7) "7888788" }
    
     
    Последнее редактирование: 25 апр 2018
  5. dejurin

    dejurin Создатель

    Регистр.:
    16 июл 2012
    Сообщения:
    16
    Симпатии:
    12
    JSON строку в студию
     
  6. b7music

    b7music

    Регистр.:
    2 ноя 2015
    Сообщения:
    512
    Симпатии:
    230
    Это которую именно, подскажите?
    Код:
    $response = json_decode(self::executeCurl($action, $data), true);
    в $data
    Код:
    array(3) { ["chat_id"]=> string(9) "132949862" ["action"]=> string(6) "typing" ["text"]=> string(7) "7888788" }
     
  7. borodatych

    borodatych Постоялец

    Регистр.:
    24 июн 2016
    Сообщения:
    125
    Симпатии:
    75
    У меня была как то проблема с возвращаемым json-ом от одного поставщика.
    Всяко измучался, тоже php7x.
    Был древний сервачок с php53.
    По какой то неведомой причине мне захотелось запустить код там, и ошибка на json была более информативной.
    Попробуйте на другой версии запустить.
    ...глупо, но все же...
     
  8. b7music

    b7music

    Регистр.:
    2 ноя 2015
    Сообщения:
    512
    Симпатии:
    230
    В общем понемногу добираюсь до истины
    Curl error: SSL connect error

    upd.
    Победил. Обновил cUrl до версии 7.59.0. Постоянно были всякого рода ошибки, нагугил и поправил socks5 на socks5h, все завелось.
    Код:
        public static function executeCurl($action, array $data = null)
        {
    
            //++ proxy
            //$proxy = 'socks5://ip:port;  - было
            $proxy = 'socks5h://ip:port';
            //-- proxy
       
            $ch = curl_init();
            $curlConfig = array(
                CURLOPT_URL            => 'https://api.telegram.org/bot' . self::$telegram->getApiKey() . '/' . $action,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                //CURLOPT_PROXY, "socks5://80.211.22.159:1080",
                //CURLOPT_SAFE_UPLOAD    => true,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSLVERSION => 6,
            );
    
    
            if (!empty($data)) {
                $curlConfig[CURLOPT_POSTFIELDS] = $data;
            }
    
            curl_setopt_array($ch, $curlConfig);
            curl_setopt($ch, CURLOPT_PROXY, $proxy);
    
               
            $result = curl_exec($ch);
           
            if ($result === false)
            {
                echo 'Curl error: ' . curl_error($ch);
            }
           
            curl_close($ch); 
            return $result;
           
           
        }
     
    Последнее редактирование: 26 апр 2018
    latteo нравится это.
Статус темы:
Закрыта.