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



我正在测试Twilio作为我们的短信解决方案,但是我在让它在代理服务器后面工作时遇到了问题。

我试过:

$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!"
);

我然后得到错误:致命错误:无法访问self::当没有类作用域时,在/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

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

来自Twilio的Ricky在这里。

虽然我不能测试你的确切代理设置,我认为你尝试的第一个解决方案将工作,如果你硬编码用户代理。例如:

$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库进行修改

非常感谢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 );

如果你没有证书。Pem然后查看此帖子https://stackoverflow.com/a/31297747/1697288

最新更新