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

Connecting to Twilio SMS via a Proxy in 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!"
);

然后我收到错误:致命错误:无法访问 self:: 当第 16 行 /var/www/twiliosms.php 中没有 class 作用域处于活动状态时

所以我修改了 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 的瑞奇。

虽然我无法使用您的确切代理设置进行测试,但我认为如果您对用户代理进行硬编码,您尝试的第一个解决方案将会奏效。例如:

$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

非常感谢 RickyRobinett,这是解决问题的方法,我 post 这个答案包含完整的解决方案,这样人们就不必费心阅读格式错误的评论。

根据以下内容更新 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 然后检查这个 post