Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » cURL и proxy

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день. После последних событий, добавил пару строк для использования прокси в функцию.

Код:
 
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 тоже на сервере работает.

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 07:39 24-04-2018 | Исправлено: b7music, 07:43 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music
ну есть же тема - не могу заставить работать cUrl через прокси
 
попробуйте проще (без двух последних строк)

Код:
curl_setopt($ch, CURLOPT_PROXY, 'socks5://' . proxyauth . '@' . $proxy);

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 07:52 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо. Имеете ввиду без этих?          
curl_close($ch);  
return $result;  
Тему не видел, да и последняя запись от 18:05 10-02-2011, да и тот без ответа.

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 07:56 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
да и последняя запись от 18:05 10-02-2011, да и тот без ответа

не повод создавать новую
 

Цитата:
Имеете ввиду без этих?  

без

Цитата:
        curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);   // Use if proxy have username and password  
        curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);  

и откуда уверенность, что прокси работает? проверяли подключение к себе?

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 07:57 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
На десктопе этот прокси указан в качестве рабочего для телеграма, и телега работает.
А разве не $proxyauth а то шторм ругается на синтаксис?

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 07:59 24-04-2018 | Исправлено: b7music, 08:04 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
а то шторм ругается на синтаксис?

ну опечатался слегка, делов то.
 
ps: я протестировал ваш код - все работает. ввел левую URL на том сервере, получил

Код:
{"ok":false,"error_code":404,"description":"Not Found"}


Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 08:06 24-04-2018 | Исправлено: Mavrikii, 08:10 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вроде начинает работать, но сыпятся ошибки вроде
Argument 1 passed to JUSTDEVELOP\TelegramBot\Entities\ServerResponse::__construct() must be of the type array, null given, called in /home/bitrix/www/bitrix/modules/justdevelop.morder/classes/general/Telegram.php on line 271 (0)
 

Код:
return new ServerResponse($response, $bot_name);

Полагаю настройки прокси нужно передать сюда:

Код:
 $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,  
             
        );  

Каким образом, не подскажите?

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 08:18 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
Полагаю настройки прокси нужно передать сюда:

зачем?
 

Цитата:
$response

ожидается массивом, а передан NULL
 
так как указанный кусок кода не приведен, как формируется $response не знаю, а телепатическими способностями не обладаю

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 08:22 24-04-2018 | Исправлено: Mavrikii, 08:22 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хоть это уже немного не по теме, но тем не менее, буду благодарен за помощь.

Код:
   
 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);
        //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);
    }

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 08:31 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music
после  

Код:
$response = json_decode(self::executeCurl($action, $data), true);  

делаете для отладки

Код:
var_dump($response);

и смотрите что там. скорее всего то, что возвращается в
Цитата:
self::executeCurl($action, $data)
не является json записью. поэтому сделайте вывод и  

Код:
 curl_close($ch);
var_dump($result);  
        return $result;  

в коде ранее

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 08:34 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bool(false) NULL

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 08:36 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
bool(false)  

значит не работает ваш запрос через проксю. либо где то опечатались, либо прокся не разрешает подключения с вашего сервера

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 08:39 24-04-2018 | Исправлено: Mavrikii, 08:40 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сделал дамп
 
        curl_close($ch);
        var_dump($ch);  
        return $result;
resource(26) of type (Unknown) NULL

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 09:00 24-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
Сделал дамп

зачем? какой смысл дампа ссылки на ресурс?
ну получили, что ресурс с таким то номером, что и следовало ожидать.

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 09:02 24-04-2018 | Исправлено: Mavrikii, 09:02 24-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
в $data у меня

Код:
array(3) { ["chat_id"]=> string(9) "132949862" ["action"]=> string(6) "typing" ["text"]=> string(7) "7888788" }

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

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 13:47 25-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music
Вы совсем не читаете, что вам пишут. Или не думаете.
Сразу сказал, что json_decode возвращает null, если не может декодировать данные. А значит ваш curl не возвращает что нужно - это видно из тех дампов, что я просил показать.
 

Цитата:
bool(false)

Вернул curl_exec, то есть ошибка в запросе. А потом этот false не смог обработать json_decode, вернув
Цитата:
NULL


Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 14:06 25-04-2018 | Исправлено: Mavrikii, 14:07 25-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А каким образом отладку включить? По какой причине не выполняется запрос, чтобы узнать  в чем именно проблема?

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 15:11 25-04-2018 | Исправлено: b7music, 15:12 25-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
b7music

Цитата:
По какой причине не выполняется запрос,

я тестировал код, он рабочий, поэтому либо у вас где то опечатка, либо блокирует ваш хостер, либо прокси блокирует доступ с вашего хоста.
 

Код:
if ($result === false)
{
    echo 'Curl error: ' . curl_error($ch);
}

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 19:02 25-04-2018
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо. Curl error: SSL connect error
Как поправить?
Пробовал CURLOPT_SSL_VERIFYHOST => 0  
Все равно ошибка.

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 05:16 26-04-2018 | Исправлено: b7music, 05:44 26-04-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как поправить?

пробуйте

Код:
curl_setopt($ch, CURLOPT_SSLVERSION, 6);

ну или из списка https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html

Всего записей: 15023 | Зарегистр. 20-09-2014 | Отправлено: 05:37 26-04-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » cURL и proxy


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru