使用 curl 发出请求,相当于 REST_CLIENT 请求

Posted

技术标签:

【中文标题】使用 curl 发出请求,相当于 REST_CLIENT 请求【英文标题】:make a request using curl, equivalent to a REST_CLIENT request 【发布时间】:2021-07-05 18:24:07 【问题描述】:

我在 Curl 中使用以下请求

curl -X GET -k -H 'Content-Type: application/json' -H 'Authorization: Bearer XXXXXXX' -H 'RowId: 100' -i 'https://url.xxx/row'

以及使用 REST_CLIENT (2.1.0) 的请求:

RestClient::Request.execute(:url => "https://url.xxx/row", :method => :get, :verify_ssl => false, :headers => :content_type => "application/json", :Authorization => "Bearer XXXXXXX", :RowId => 100)

RestClient::NotFound: 404 未找到

第一个(Curl)正在工作,但 RestClient 中的等效请求没有。

问题是 rest-client 没有传递所有标头: :content_type => "application/json", :Authorization => "Bearer XXXXXXX", :RowId => 100

仅使用 content_type 和 Authorization,其他在请求发送时不使用

net/http 也有类似的问题:

require 'net/http'

uri = URI('https://url.xxx/row')
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.ssl_version = :TLSv1
req = Net::HTTP::Get.new uri
req['content_type'] = 'application/json'
req['Authorization'] = "Bearer #token"
req['RowId'] = 100
res = https.request req
puts res.body

有什么建议吗? 谢谢

【问题讨论】:

您使用的是哪个 gem 版本的 rest-client? @Mshka 2.1.0 版 【参考方案1】:

rest-client 将在多种情况下返回 404 错误,不仅仅是未找到错误

这里最好的方法是返回并检查服务器的响应

根据他们的文档:https://github.com/rest-client/rest-client#exceptions-see-httpwwww3orgprotocolsrfc2616rfc2616-sec10html

>> RestClient.get 'http://example.com/nonexistent'
Exception: RestClient::NotFound: 404 Not Found

>> begin
     RestClient.get 'http://example.com/nonexistent'
   rescue RestClient::ExceptionWithResponse => e
     e.response
   end
=> <RestClient::Response 404 "<!doctype h...">

可能也尝试调用e.response.body检查错误

【讨论】:

以上是关于使用 curl 发出请求,相当于 REST_CLIENT 请求的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中使用 CURL 发出 PUT 请求

如何使用 cURL 在 PHP 中发出 PATCH 请求?

在节点js中使用-u参数在CURL请求中发出GET请求

使用CURL发出多个请求时无法保存会话

为什么浏览器可以在JMeter和Curl发出时发出XHR POST请求

向数百个站点发出 curl 请求是不是会被某些主机视为攻击?