2015-10-20 2 views
0

Я тестирую Twilio для использования в качестве нашего решения для SMS, но у меня возникают проблемы с его работой за нашим прокси-сервером.Подключение к Twilio SMS через прокси в PHP

Я пробовал:

$twiliohttp = new Services_Twilio_TinyHttp(
     "https://api.twilio.com", 
     array("curlopts" => array(
    CURLOPT_USERAGENT => self::USER_AGENT, 
    CURLOPT_HTTPHEADER => array('Accept-Charset: utf-8'), 
    CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', 
    CURLOPT_PROXY => '3.X.X.X:9400', 
    )) 
); 
$client = new Services_Twilio($account_sid, $auth_token, null, $twiliohttp); 


$message = $client->account->messages->sendMessage(
    '+441432XXXX31', // From a Twilio number in your account 
    '+44776XXXX712', // Text any number 
    "Hello monkey!" 
); 

Я тогда получаю ошибку: Фатальная ошибка: Не удается получить доступ к себя :: когда ни один класс не сфера активен в /var/www/twiliosms.php на линии 16

Так я изменил файл Twilio.php изменяющее массив curlopts добавить:

CURLOPT_PROXY => '3.X.X.X:9400', 

и вызова Twilio с:

$client = new Services_Twilio($account_sid, $auth_token); 
$message = $client->account->messages->sendMessage(
    '+4414XXXXXXX1', // From a Twilio number in your account 
    '+4477XXXXXXX2', // Text any number 
    "Hello monkey!" 
); 

Но тогда я получаю ошибку:

Fatal error: Uncaught exception 'Services_Twilio_RestException' with message 'Could not decode response body as JSON. This likely indicates a 500 server error' in /var/www/GE/includes/SMS/Twilio.php:288 
Stack trace: 
#0 /var/www/GE/includes/SMS/Twilio.php(181): Base_Services_Twilio->_processResponse(Array) 
#1 /var/www/GE/includes/SMS/Twilio/ListResource.php(92): Base_Services_Twilio->createData('/2010-04-01/Acc...', Array) 
#2 /var/www/GE/includes/SMS/Twilio/Rest/Messages.php(24): Services_Twilio_ListResource->_create(Array) 
#3 /var/www/GE/includes/SMS/Twilio/Rest/Messages.php(71): Services_Twilio_Rest_Messages->create(Array) 
#4 /var/www/GE/twiliosms.php(35): Services_Twilio_Rest_Messages->sendMessage('+441432233131', '+447766205712', 'Hello monkey!') 
#5 {main} 
    thrown in /var/www/GE/includes/SMS/Twilio.php on line 288 

Любые идеи, как сделать эту работу решения через прокси-сервер, который не допускает входящие соединения?

Заранее спасибо.

ответ

1

Огромное спасибо RickyRobinett, как решить эту проблему, я отправляю этот ответ с полным решением, чтобы людям не приходилось проходить через плохо отформатированные комментарии.

Обновление TinyHttp в соответствии с: https://github.com/camuthig/twilio-php/commit/20d4f3c4479c93894866f498e89a0f13cf16d6bf

$twiliohttp = new Services_Twilio_TinyHttp(
     "https://api.twilio.com", 
     array("curlopts" => array(
    CURLOPT_USERAGENT => "Twilio Proxy/1.0", 
    CURLOPT_HTTPHEADER => array('Accept-Charset: utf-8'), 
    CURLOPT_CAINFO => 'includes/SMS/cacert.pem', 
    CURLOPT_PROXY => 'X.X.X.X:9400', 
    )) 
); 

$client = new Services_Twilio($account_sid, $auth_token, null, $twiliohttp); 

Если вы не имеют cacert.pem то проверка этой пост https://stackoverflow.com/a/31297747/1697288

2

Рикки из Twilio здесь.

Хотя я не мог проверить вашу точную настройку прокси-сервера, я думаю, что первое решение, которое вы пробовали, будет работать, если вы жестко настроите пользовательский агент. Например:

$twiliohttp = new Services_Twilio_TinyHttp(
     "https://api.twilio.com", 
     array("curlopts" => array(
    CURLOPT_USERAGENT => "Twilio Proxy/1.0", 
    CURLOPT_HTTPHEADER => array('Accept-Charset: utf-8'), 
    CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', 
    CURLOPT_PROXY => '3.X.X.X:9400', 
    )) 
); 

Вам также может понадобиться, чтобы сделать изменения в библиотеку TinyHttp показанной here.

+0

теперь я получаю: Фатальная ошибка: неперехваченное исключение «Services_Twilio_RestException» с сообщением «Невозможно декодировать тело ответа как JSON. Вероятно, это указывает на ошибку сервера 500 в /var/www/GE/includes/SMS/Twilio.php:288 – trevrobwhite

+0

В Twilio.php в строке 288, пытающейся сбросить полученный вами ответ. Глядя на этот ответ, можно получить более полное представление о том, почему мы не можем разобрать запрос как json: private function _processResponse ($ response) { var_dump ($ response); – rickyrobinett

+0

Это возвращает ошибку 404, однако я могу закрутиться к этому прокси без проблем, есть ли шанс, что вы можете поддержать сессию поддержки? Наш прокси будет разрешать только https, если это проблема. строка (581) «HTTP/1.1 404 NOT FOUND Access-Control-Allow-Credentials: true Access-Control-Allow-Headers: Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS Access-Control-Allow-Origin: * – trevrobwhite

Смежные вопросы