cURL и proxy

Статус
В этой теме нельзя размещать новые ответы.

b7music

Мой дом здесь!
Регистрация
2 Ноя 2015
Сообщения
655
Реакции
373
Добрый день. В связи с блокировкой телеги, решил использовать через прокси.
Добавил соответствующие настройки, однако сообщения не уходят.
Код:
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 на сервере установлен и работает.
В логах пусто, ошибок нет.
 
Затем идет функция
Код:
    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
 
Последнее редактирование:
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" }
 
Последнее редактирование:
JSON строку в студию
 
Это которую именно, подскажите?
Код:
$response = json_decode(self::executeCurl($action, $data), true);
в $data
Код:
array(3) { ["chat_id"]=> string(9) "132949862" ["action"]=> string(6) "typing" ["text"]=> string(7) "7888788" }
 
У меня была как то проблема с возвращаемым json-ом от одного поставщика.
Всяко измучался, тоже php7x.
Был древний сервачок с php53.
По какой то неведомой причине мне захотелось запустить код там, и ошибка на json была более информативной.
Попробуйте на другой версии запустить.
...глупо, но все же...
 
В общем понемногу добираюсь до истины
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;
       
       
    }
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху