gpt4 book ai didi

ruby-on-rails - HTTP 请求适用于 Postman 但不适用于 Rails

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:54 25 4
gpt4 key购买 nike

我正在尝试发出 HTTP 请求以从网站获取数据。为此,我必须使用自定义 header 。当我向 Postman 发出请求时,通过添加自定义 header ,一切正常。当我删除自定义 header 时,我收到此错误消息:{"error": "content not found"},这是正常的。

我试图在 Rails 中提出相同的请求。这是我的代码:

uri = URI.parse("https://www.itqi.com/api/master-descriptor")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
req = Net::HTTP::Get.new(uri.path)
req["itqi-key"] = '************************'
response = http.request(req)

在本例中,我添加了自定义 header 。但尽管如此,我还是没有得到任何数据,只有这条错误消息:{"error": "content not found"},就像我的自定义 header 没有被考虑在内一样。我尝试了很多可能性都没有成功。

有没有人可以帮助我?我的想法用完了。

提前感谢您的建议。

最好的问候,

编辑

这是我对 Faraday 的 https 请求:

conn = Faraday.new(:url => 'https://www.itqi.com', :ssl => {:verify => false})
response = conn.get do |req|
req.url '/api/master-descriptor'
req.headers['Content-Type'] = 'application/json'
req.headers['itqi-key'] = '********************'
end

这是服务器响应:

RESPONSE: #https://www.itqi.com/api/master-descriptor> @request=# @request_headers={"User-Agent"=>"Faraday v0.12.2", "Content-Type"=>"application/json", "itqi-key"=>"**********************"} @ssl=# @response=# @response_headers={"date"=>"Wed, 13 Dec 2017 08:25:53 GMT", "server"=>"Apache/2.4.10 (Debian)", "content-length"=>"29", "connection"=>"close", "content-type"=>"application/json; charset=UTF-8"} @status=404 @reason_phrase="Not Found">>

总是一样的问题:(

************************ 解决方案 ********************** ****

经过一些研究,似乎标题键在 Rails 中区分大小写。所以,为了解决这个问题,我不得不强制 Rails 将它们变成小写。如果没有这些,Rails 会系统地将它们资本化。

这是我的解决方案:

conn = Faraday.new(url: 'https://www.itqi.com', ssl: {verify: false}) do |conn|
conn.request :json
conn.response :json, :content_type => /\bjson$/
conn.adapter Faraday.default_adapter
end
response = conn.get do |req|
req.url '/api/master-descriptor'
itqi_key = CaseSensitiveString.new('itqi-key')
req.headers[itqi_key] = '************************'
end

class CaseSensitiveString < String
def downcase
self
end
def capitalize
self
end

def to_s
self
end
end

最佳答案

您的代码看起来不像 http://ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html#label-Setting+Headers 上的示例.

但我建议您改用法拉第 (https://github.com/lostisland/faraday) 会更快乐。

关于ruby-on-rails - HTTP 请求适用于 Postman 但不适用于 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com