通过PHP中的代理连接到Twilio SMS

问题描述:

我在测试Twilio作为我们的SMS解决方案,但是我遇到了问题让我们在代理服务器后面工作。通过PHP中的代理连接到Twilio SMS

我已经试过:

$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 

任何想法如何使通过代理服务器不允许入站连接,这种解决方案的工作?

在此先感谢。

非常感谢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://*.com/a/31297747/1697288

Ricky从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', 
    )) 
); 

您可能还需要做出修改here所示的TinyHttp库。

+0

我现在得到:致命错误:有消息未捕获的异常“Services_Twilio_RestException” '无法将响应正文解码为JSON。这可能表示在/var/www/GE/includes/SMS/Twilio.php:288 – trevrobwhite

+0

中的500服务器错误在288线Twilio.php尝试转储您收到的响应。查看此响应可能会提供更多信息,以了解为什么我们无法将请求解析为json: private function _processResponse($ response) { var_dump($ response); – rickyrobinett

+0

它返回一个404错误,但是我可以毫无问题地对该代理进行卷曲,有没有可能支持会话的机会?我们的代理将只允许https如果这是一个问题 字符串(581)“HTTP/1.1 404未找到 访问控制允许凭证:真 访问控制允许标题:接受,授权,内容类型,如果 - 匹配,如果修改自从,如果 - 无匹配,如果 - 未修改 - 自从 访问控制允许方法:GET,POST,DELETE,选项 访问控制 - 允许 - 起源:* – trevrobwhite