【问题标题】:How set Header with Net::Http for Goo.gl Shorten service?如何为 Goo.gl Shorten 服务设置带有 Net::Http 的 Header?
【发布时间】:2012-01-13 06:32:18
【问题描述】:

Like describe in API Goo.gl

手动卷曲完美:

curl https://www.googleapis.com/urlshortener/v1/url \
    -H 'Content-Type: application/json' \
    -d '{"longUrl": "http://www.rubyinside.com/"}'

当我尝试在 Net::Http 中进行此操作时:

require "net/https"
require "uri"
uri = URI.parse("https://www.googleapis.com/urlshortener/v1/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["Content-Type"] = "application/json"
request.set_form_data({"longUrl" => "http://www.rubyinside.com/"})
response = http.request(request)
puts response.body

但响应失败:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "parseError",
    "message": "This API does not support parsing form-encoded input."
   }
  ],
  "code": 400,
  "message": "This API does not support parsing form-encoded input."
 }
}
 => nil

I see an another issue but seem does not work

This httparty sample code work but i want use net_http

【问题讨论】:

    标签: ruby net-http goo.gl


    【解决方案1】:

    Ruby 不是我的领域,但我最近在 C# 中做了类似的事情。根据 Ruby-Doc.org 该方法,.set_form_data 将内容类型标头设置为“application/x-www-form-urlencoded”,这会覆盖您将其设置为 JSON。

    像 Fiddler2 这样的工具对破译发生的事情很有帮助。

    这个问题的答案有一个网络链接:http JSON example https://stackoverflow.com/a/2037621/15710

    【讨论】:

      【解决方案2】:

      您必须以 json 格式发送数据,而不是像您尝试做的那样进行格式编码。尝试像这样更改您的代码:

      ....
      require 'json'
      
      ....
      request.body = {"longUrl" => "http://www.rubyinside.com/"}.to_json
      

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 2021-04-22
        • 2019-04-28
        • 1970-01-01
        • 2021-12-13
        • 2011-07-28
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        相关资源
        最近更新 更多