有没有办法使用平面 .rb 文件来接受 POST 请求,或者我是否需要使用 Rails 或 Sinatra 等框架来接受请求?
我正在考虑如何使用平面 .php 文件来接受 POST 请求,并使用$_REQUEST[]
变量来访问传递的数据。
更具体地说,我正在尝试通过从 PHP 移植我的一个 Twilio 应用程序来学习一点 Ruby。该应用程序接受 SMS,处理发送的消息,并根据收到的消息正文发送回复。
在使用 PHP 时,我可以将 Twilio 站点中的 SMS 请求 URL 设置为我的 PHP 文件。PHP 文件使用$_REQUEST[]
数组来使用接收到的消息。(似乎与此等效的 Ruby 是params[]
.)
这是我正在谈论的PHP 版本的快速示例:
<?php
require "twilio.php"; // Twilio Library
$ApiVersion = "2010-04-01"; // Twilio API Version
$AccountSid = "SID"; // Twilio SID
$AuthToken = "TOKEN"; // Twilio Token
// Instantiate a new Twilio Rest Client
$client = new TwilioRestClient($AccountSid, $AuthToken);
// Get message body & who it's from, for the SMS that was just received
$SMSbody = mysql_real_escape_string($_REQUEST['Body']);
if ($SMScode == "codeword"){
$SMSresponse = "You know the code.";
}
else{
$SMSresponse = "You do not know the code.";
}
// Twilio response to the sender
header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<Sms><?php echo $SMSresponse;?></Sms>
</Response>
这是我对Ruby 等效项的尝试,这可能非常糟糕:
require "rubygems"
require "twilio-ruby"
@account_sid = "SID"
@auth_token = "TOKEN"
smsbody = params['body']
@client = Twilio::REST::Client.new(@account_sid, @auth_token)
@account = @client.accounts.get(@account_sid)
if smsbody == "codeword"
smsreply = "You know the code"
else
smsreply = "You do not know the code"
response = Twilio::TwiML::Response.new do |r|
r.Sms smsreply
end
# print the result
puts response.text
这会导致 Twilio 调试仪表板指出回复超过 160 个字符。这是因为回复是完整的 Ruby 代码,而不是运行Ruby 代码的结果。这让我觉得 POST 请求没有被正确接受......