【问题标题】:How to use httparty instead of net/http or curl如何使用 httparty 而不是 net/http 或 curl
【发布时间】:2018-12-23 00:21:52
【问题描述】:

我有一个有效的 curl 请求

curl -X GET -k 'https://APIADDRESSHERE' -u 'USERNAME:PASSWORD' -H 'Content-Type: application/json'

我也可以在 ruby​​ 中使用它:

require 'net/http'
require 'uri'
require 'openssl'

uri = URI.parse("https://APIADDRESSHERE")
request = Net::HTTP::Get.new(uri)
request.basic_auth("USERNAME", "PASSWORD")
request.content_type = "application/json"

req_options = {
  use_ssl: uri.scheme == "https",
  verify_mode: OpenSSL::SSL::VERIFY_NONE,
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

但是,当我使用 httparty 尝试此操作时,我不断收到 401 错误消息:

在 SecurityContext 中未找到 Authentication 对象 此请求需要 HTTP 身份验证。

我已经尝试了以下的很多变体,但我被卡住了。

response = HTTParty.get('https://APIURLHERE', {"headers": { "Authorization:" => "BASE64ENCODEDUSERNAMEANDPASSWORD", "Content-Type" => "application/json" }})

【问题讨论】:

  • 不是重复的
  • 可以肯定的是,BASE64ENCODEDUSERNAMEANDPASSWORD 是指 USER:PASSWORD 的 Base64 对吗? (包括冒号)。
  • 怎么不是重复的?您正在将基本身份验证与 net http 一起使用,并且您想知道如何将基本身份验证与 httparty 一起使用。 server 返回的错误消息甚至告诉您使用基本身份验证。
  • 我尝试使用基本身份验证,但它需要一个字符串,您可以在另一个上看到类似的评论,其他人也使用字符串卡住

标签: ruby httparty


【解决方案1】:

您是否尝试过以下方法?

response = HTTParty.get('https://APIURLHERE', headers: { "Authorization:" => "BASE64ENCODEDUSERNAMEANDPASSWORD", "Content-Type" => "application/json" })

【讨论】:

  • 当我这样做时,我得到了错误:HTTP Status 401 - An Authentication object was not found in the SecurityContext
【解决方案2】:

好吧,我在路上的某个地方犯了一个简单的错误,因为来自类似帖子的原始解决方案有效......不知道上次我在做这个时它是如何工作的 50 次,但它显然是我在某个地方的错误.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2020-10-18
    • 2017-12-08
    • 1970-01-01
    • 2013-11-13
    • 2016-06-24
    相关资源
    最近更新 更多