法拉第连接:切换请求模式?

李维

faraday用来处理对内部API的一些请求。API端点使用CSRF令牌,因此我也使用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

发出请求后,似乎不允许您进行切换。我知道您可以通过传递一个块来对每个请求本身进行一些修改,但是我似乎找不到在其中进行修改的位置:multipart

提前致谢。

肖恩

创建连接()时,您将要同时包括两个中间件选项,然后使用显式标头进行切换:url_encoded:multipartContent-Type

根据法拉第自述文件,您可以同时指定两者。摘录:

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

此请求中间件设置通过以下方式影响POST / PUT请求:

  1. Request::Multipart 检查有效负载中的文件,否则一切保持不变;
  2. Request::UrlEncoded 如果尚未编码或其他类型,则编码为“ application / x-www-form-urlencoded”。

因此添加:multipart仍然允许使用url编码的帖子,因为仅当有效负载中有文件时才重要。然后,如果您明确地Content-Type为文件上传设置了文件,则应该没问题-法拉第将使用正确的请求中间件,因为您明确地告诉它使用多部分。但是,如果您指定,则默认为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

法拉第JSON帖子“未定义的方法字节大小”为具有主体

一个简单的获取法拉第超时

红宝石法拉第活着

全局配置法拉第用户代理

如何获得法拉第/扫描以遍历整个DynamoDB表?

如何通过令牌认证从法拉第获取请求获得响应?

法拉第(Faraday)在调用应用程序API之一时随机引发错误“ SSL_write ::在初始化时关闭”

法拉第分段请求与json和文件数据

Rspec:使Omniauth / oauth0与法拉第请求一起使用

为什么法拉第依赖性不能由捆绑器解决?

暗模式切换

Postgres 9.6.17和JDBC 42.2.1如何将连接模式切换为“扩展”

在模式之间切换

如何在文本文件中的特定模式后替换请求值?

在Ruby ElasticSearch Client中设置法拉第超时

Gemfile Twitter +法拉第

如何使用“ http://example.com/something”类型的网址初始化法拉第?

在Kali Linux中切换到监视模式后是否打算断开WiFi连接?

强制长臂猿宝石(或法拉第)在Heroku上使用QuotaGuard静态HTTP代理

法拉第宝石的飞行前选项要求

如何为法拉第设置初始颜色?

无法访问视图上的法拉第参数

卡在 rspec 中的法拉第

使用 Ruby 连接到 Coinbase API 并遇到连接问题。法拉第

带有法拉第的 Rails 应用程序:在没有 url 参数的情况下重构 Faraday::new() 时出现问题

如何使用法拉第发送json

Spring Integration TCP - 对通道的请求/响应切换请求

法拉第轨道从它开始

角形模式切换