使用Net :: HTTP向HTTPS发出POST请求

问题描述 投票:2回答:1

使用Ajax的POST请求完美地运行:

var token = "my_token";

function sendTextMessage(sender, text) {
  $.post('https://graph.facebook.com/v2.6/me/messages?',
    { recipient: {id: sender}, 
      message: {text:text},
      access_token: token
    },
    function(returnedData){
         console.log(returnedData);
  });
};

sendTextMessage("100688998246663", "Hello");

我需要在Ruby中拥有相同的请求。我尝试使用Net:HTTP,但它不起作用,我没有收到任何错误,所以我无法调试它:

    token = "my_token"
    url = "https://graph.facebook.com/v2.6/me/messages?"
    sender = 100688998246663
    text = "Hello"
    request =  {
                 recipient: {id: sender},
                 message: {text: text},
                 access_token: token
                }.to_json


  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Post.new(uri.request_uri)

  response = http.request(request)
  response.body

我该如何处理错误或哪里出错?

ruby-on-rails ruby post rest-client net-http
1个回答
4
投票

您的request哈希正在被您分配requestNet::HTTP对象所取代。还要确保在HTTP请求的正文中设置请求参数:

require "active_support/all"
require "net/http"

token = "my_token"
url = "https://graph.facebook.com/v2.6/me/messages?"
sender = 100688998246663
text = "Hello"
request_params =  {
  recipient: {id: sender},
  message: {text: text},
  access_token: token
}
request_header = { 'Content-Type': 'application/json' }

uri = URI.parse(url)

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(uri.path, request_header)
request.body = request_params.to_json

http.request(request)

response = http.request(request)

您可能会发现以下参考资料有用:http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

© www.soinside.com 2019 - 2024. All rights reserved.