2016-05-29 4 views
1

Борясь немного с faraday. Я хотел бы знать, что я действительно отправляю на сервер. Я получаю тело ответа, но не получаю доступ к телу запроса. Я обнаружил, что есть метод request.env, но я никак не могу получить доступ к нему.Faraday получить доступ к параметрам запроса

Как это будет работать?

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? 

То, что я пытался делать это было:

[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> 

Но у меня нет доступа к телу. Есть идеи?

Спасибо!

+0

Я также не вижу в этом хорошего способа создания объекта Faraday :: Request, который создается, является эфемерным после получения ответа: \ – Anthony

ответ

3

Вы можете попробовать внедрить промежуточное программное обеспечение только для этой цели. Просто, чтобы дать вам краткое представление о том, что вы можете сделать для достижения этого (может быть, более простой способ, но я действительно не знаю, полагаю, потому что вы указываете тело запроса, нет никакой реальной необходимости фиксировать это, как вы уже должны это доступно).

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" 
Смежные вопросы