首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Faraday可以访问请求参数

Faraday可以访问请求参数
EN

Stack Overflow用户
提问于 2016-05-29 12:36:48
回答 1查看 6.3K关注 0票数 3

和法拉第一起挣扎。我想知道我到底向服务器发送了什么。我得到响应体,但不访问请求体。我发现有一个request.env方法,但我无法访问那里的身体。

那该怎么做?

代码语言:javascript
复制
conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
  faraday.request  :url_encoded             # form-encode POST params
  faraday.response :logger                  # log requests to STDOUT
  faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
end

data = conn.post do |req|
  req.url '/nigiri'
  req.headers['Content-Type'] = 'application/json'
  req.body = '{ "name": "Unagi" }'
end

# how do I get access to the request body here?

我试着做的是:

代码语言:javascript
复制
[4] pry(main)> request.env.request

=> #<struct Faraday::RequestOptions
 params_encoder=nil,
 proxy=nil,
 bind=nil,
 timeout=nil,
 open_timeout=nil,
 boundary=nil,
 oauth=nil>

但我无法接触身体。有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-29 18:41:19

您可以尝试为此目的实现一个中间件。为了让您快速了解您可以做些什么来实现这个目标(可能有一种更简单的方法,但我真的不知道,我想,因为您指定了请求主体,所以没有真正的需要捕获它,因为您应该已经有此功能了)。

代码语言:javascript
复制
require 'faraday'

class RequestBody < Faraday::Middleware
  def call(env)
    request_body = env.body

    @app.call(env).on_complete do |response|
      response[:request_body] = request_body
    end
  end
end

conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
  faraday.use RequestBody
  faraday.adapter Faraday.default_adapter
end

data = conn.post do |req|
  req.url '/nigiri'
  req.headers['Content-Type'] = 'application/json'
  req.headers['foo'] = 'bar'
  req.body = '{ "name": "Unagi" }'
end

# 2.2.2 > data.env[:request_body]
#  => "{ \"name\": \"Unagi\" }"
# 2.2.2 > data.env.request_headers
#  => {"User-Agent"=>"Faraday v0.9.2", "Content-Type"=>"application/json", "foo"=>"bar"}
# 2.2.2 > data.body
#  => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>301 Moved Permanently</title>\n</head><body>\n<h1>Moved Permanently</h1>\n<p>The document has moved <a href=\"http://www.sushi.com/index.php/nigiri\">here</a>.</p>\n<hr>\n<address>Apache/2.4.10 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4 PHP/5.4.32 Server at sushi.com Port 80</address>\n</body></html>\n"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37509977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档