gpt4 book ai didi

ruby - 法拉第连接 : Switching the request mode?

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:27 25 4
gpt4 key购买 nike

我正在使用 faraday 来处理对内部 API 的一些请求。 API 端点使用 CSRF token ,因此我也使用 faraday-cookie_jar

对于几个 API 端点,它们需要一个 :multipart 请求。其他人没有。

问题

有没有办法利用相同的 Connection 对象,但切换你是在做 :multipart 还是 :url_encoded要求?

目前,我必须使用两个连接,具体取决于我发出的请求类型。在完成至少 1 个请求后,您似乎无法更改连接的请求方法。

@connection = Faraday.new(url: 'http://localhost:3000') do |faraday|
faraday.request :url_encoded
faraday.use :cookie_jar
faraday.adapter Faraday.default_adapter
end

@connection.get '/something'

# try to change to :multipart
@connection.request :multipart # => Faraday::RackBuilder::StackLocked: can't modify middleware stack after making a request

它似乎不允许您在提出请求后进行切换。我知道您可以通过传递一个 block 来为每个请求本身稍微修改请求,但我似乎无法找到修改位置以切换到其中的 :multipart

提前致谢。

最佳答案

您需要在创建连接时包含两个中间件选项(:url_encoded:multipart),然后使用显式切换Content-Type header 。

根据 Faraday ReadMe ,您可以同时指定它们。摘录:

 Faraday.new(...) do |conn|
# POST/PUT params encoders:
conn.request :multipart
conn.request :url_encoded
conn.adapter :net_http
end

This request middleware setup affects POST/PUT requests in the following way:

  1. Request::Multipart checks for files in the payload, otherwise leaves everything untouched;
  2. Request::UrlEncoded encodes as "application/x-www-form-urlencoded" if not already encoded or of another type.

所以添加 :multipart 仍然允许 url 编码的帖子,因为它只在有效负载中有文件时才重要。然后,如果您明确设置文件上传的 Content-Type,您应该没问题 - Faraday 将使用正确的请求中间件,因为您明确告诉它使用 multipart。但如果您指定,它将默认为 url 编码。

# works using :url_encoded
@connection.post '/something' do |req|
req.body = { some: 'posted fields' }
end

# works using :multipart because Content-Type was explicitly set
@connection.post '/some_file_endpoint' do |req|
req.headers['Content-Type'] = 'multipart/form-data'
req.body = { file_field: Faraday::UploadIO.new(file_path, 'text/plain') }
end

关于ruby - 法拉第连接 : Switching the request mode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738044/

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