[英]Sending POST request in Rails
How would I go about sending an HTTP POST request in the following format in a Rails setup: 如何在Rails设置中以下列格式发送HTTP POST请求:
curl https://api.venmo.com/v1/payments -d access_token=4e4sw1111111111t8an8dektggtcbb45 -d email="someemail@gmail.com" -d amount=5 -d note="Delivery."
I'd like to have users input the email/amount/note parameters into a form on a webpage, then pass that data (when the user clicks the submit button) into a Controller where the access_token parameter is stored to then fire off the POST request. 我希望用户将电子邮件/金额/注释参数输入到网页上的表单中,然后将该数据(当用户单击提交按钮时)传递到存储access_token参数的Controller中,然后触发POST请求。
So far I've tried setting up the Controller with this method (and calling it from the view html.erb): 到目前为止,我已尝试使用此方法设置Controller(并从视图html.erb中调用它):
def make_payment
if !params[:access_token].nil?
form_data = {
"email" => @email_to,
"amount" => @amount_to,
"note" => @note_to,
"access_token" => :access_token
}
url = "https://api.venmo.com/v1/payments"
request = Net::HTTP::Post.new(url, form_data)
response = http.request(request)
end
end
Here's my current view setup: 这是我当前的视图设置:
<div class="box box-warning">
<div class="box-header">
<h3 class="box-title">Pay Bill using Venmo Account</h3>
<div id="payment_note_input">
<input id="payment_note" type="text" class="form-control" required placeholder="add a note to your payment">
</div>
<div id="payment_target_input" >
<input id="payment_target" type="text" class="form-control" required placeholder="pay an email address">
</div>
<div id="payment_amount_input">
<input id="payment_amount" type="text" class="form-control" required placeholder="enter the payment amount! ">
</div>
</br>
<button class="btn btn-danger" type="button" onClick= <%=make_payment%> > Make payment</button>
</div>
I feel like I'm close to a solution here... 我觉得我在这里接近解决方案......
You can use httpparty gem to achieve that, its easy to use in only 1 line: 您可以使用httpparty gem来实现它,它只在一行中易于使用:
response = HTTParty.post("https://example.com?param1=value1",
:body => {:text => data}.to_json,
:headers => {'Content-Type' => 'application/json'}
)
You can remove Body and Header if you don't have specific Body or Header, 如果您没有特定的Body或Header,可以删除Body和Header,
and if you want to achieve Get request its even easier: 如果你想实现Get请求更容易:
responce = HTTParty.get('http://example.com.json')
json=JSON.parse(responce.body) # in case you expect json responce
You need to use a form in order to generate a POST request from the web page. 您需要使用表单才能从网页生成POST请求。 Rails provides you with Form helpers that would help you achieve this. Rails为您提供表单助手,帮助您实现这一目标。
<div class="box box-warning">
<div class="box-header">
<%= form_tag make_payment_path do %>
<%= hidden_field_tag "access_token", @access_token %>
<h3 class="box-title">Pay Bill using Venmo Account</h3>
<div id="payment_note_input">
<%= text_field_tag "payment_note", nil, class: "form-control", placeholder: "add a note to your payment" %>
</div>
<div id="payment_target_input" >
<%= text_field_tag "payment_target", nil, class: "form-control", placeholder: "pay an email address" %>
</div>
<div id="payment_amount_input">
<%= text_field_tag "payment_amount",nil, class:"form-control", placeholder: "enter the payment amount! ">
</div>
</br>
<%= sumbit_tag "Make payment", class:"btn btn-danger" %>
<% end %>
</div>
And then you can access the form variables in your controller by... 然后你可以通过...访问控制器中的表单变量
def make_payment
access_token = params[:access_token]
note = params[:payment_note]
target = params[:payment_target]
...
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.