- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在尝试使用 Faraday 将文件上传到网络服务时遇到问题。
我的代码:
conn = Faraday.new('http://myapi') do |f|
f.request :multipart
end
payload = { :file => Faraday::UploadIO.new('...', 'image/jpeg') }
conn.post('/', payload)
尝试发布后似乎没有任何反应。当我检查响应时 this是我所看到的:
#<Faraday::Response:0x007fd9e5903870 @env={:method=>:post, :body=>#<Faraday::CompositeReadIO:0x007fd9e5903a50 @parts=[#<Parts::FilePart:0x007fd9e5903e38 @head="-------------RubyMultipartPost\r\nContent-Disposition: form-data; name=\"file\"; filename=\"indymade-badge-horizontal.png\"\r\nContent-Length: 7821\r\nContent-Type: image/png\r\nContent-Transfer-Encoding: binary\r\n\r\n", @foot="\r\n", @length=8026, @io=#<CompositeReadIO:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>, #<UploadIO:0x007fd9e514a3b8 @content_type="image/png", @original_filename="indymade-badge-horizontal.png", @local_path="/Users/anthonator/Downloads/indymade-badge-horizontal.png", @io=#<File:/Users/anthonator/Downloads/indymade-badge-horizontal.png>, @opts={}>, #<StringIO:0x007fd9e5903b90>], @index=0>>, #<Parts::EpiloguePart:0x007fd9e5903ac8 @part="-------------RubyMultipartPost--\r\n\r\n", @io=#<StringIO:0x007fd9e5903a78>>], @ios=[#<CompositeReadIO:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>, #<UploadIO:0x007fd9e514a3b8 @content_type="image/png", @original_filename="indymade-badge-horizontal.png", @local_path="/Users/anthonator/Downloads/indymade-badge-horizontal.png", @io=#<File:/Users/anthonator/Downloads/indymade-badge-horizontal.png>, @opts={}>, #<StringIO:0x007fd9e5903b90>], @index=0>, #<StringIO:0x007fd9e5903a78>], @index=0>, :url=>#<URI::HTTPS:0x007fd9e5909d60 URL:https://myapi>, :request_headers=>{"User-Agent"=>"Faraday v0.8.7", "Content-Type"=>"multipart/form-data;boundary=-----------RubyMultipartPost", "Content-Length"=>"8062"}, :parallel_manager=>nil, :request=>{:proxy=>nil, :boundary=>"-----------RubyMultipartPost"}, :ssl=>{}, :response=>#<Faraday::Response:0x007fd9e5903870 ...>}, @on_complete_callbacks=[]>
irb(main):065:0> response.inspect
=> "#<Faraday::Response:0x007fd9e5903870 @env={:method=>:post, :body=>#<Faraday::CompositeReadIO:0x007fd9e5903a50 @parts=[#<Parts::FilePart:0x007fd9e5903e38 @head=\"-------------RubyMultipartPost\\r\\nContent-Disposition: form-data; name=\\\"file\\\"; filename=\\\"indymade-badge-horizontal.png\\\"\\r\\nContent-Length: 7821\\r\\nContent-Type: image/png\\r\\nContent-Transfer-Encoding: binary\\r\\n\\r\\n\", @foot=\"\\r\\n\", @length=8026, @io=#<CompositeReadIO:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>, #<UploadIO:0x007fd9e514a3b8 @content_type=\"image/png\", @original_filename=\"indymade-badge-horizontal.png\", @local_path=\"/Users/anthonator/Downloads/indymade-badge-horizontal.png\", @io=#<File:/Users/anthonator/Downloads/indymade-badge-horizontal.png>, @opts={}>, #<StringIO:0x007fd9e5903b90>], @index=0>>, #<Parts::EpiloguePart:0x007fd9e5903ac8 @part=\"-------------RubyMultipartPost--\\r\\n\\r\\n\", @io=#<StringIO:0x007fd9e5903a78>>], @ios=[#<CompositeReadIO:0x007fd9e5903b68 @ios=[#<StringIO:0x007fd9e5903bb8>, #<UploadIO:0x007fd9e514a3b8 @content_type=\"image/png\", @original_filename=\"indymade-badge-horizontal.png\", @local_path=\"/Users/anthonator/Downloads/indymade-badge-horizontal.png\", @io=#<File:/Users/anthonator/Downloads/indymade-badge-horizontal.png>, @opts={}>, #<StringIO:0x007fd9e5903b90>], @index=0>, #<StringIO:0x007fd9e5903a78>], @index=0>, :url=>#<URI::HTTPS:0x007fd9e5909d60 URL:https://myapi>, :request_headers=>{\"User-Agent\"=>\"Faraday v0.8.7\", \"Content-Type\"=>\"multipart/form-data;boundary=-----------RubyMultipartPost\", \"Content-Length\"=>\"8062\"}, :parallel_manager=>nil, :request=>{:proxy=>nil, :boundary=>\"-----------RubyMultipartPost\"}, :ssl=>{}, :response=>#<Faraday::Response:0x007fd9e5903870 ...>}, @on_complete_callbacks=[]>"
正文被设置为 CompositeReadIO 对象,它似乎永远不会发出请求。
最佳答案
原来我需要指定一个适配器。这是最终有效的代码。
conn = Faraday.new('http://myapi') do |f|
f.request :multipart
f.request :url_encoded
f.adapter :net_http # This is what ended up making it work
end
payload = { :file => Faraday::UploadIO.new('...', 'image/jpeg') }
conn.post('/', payload)
关于ruby - 使用法拉第上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725195/
我正在尝试使用 Faraday 将路由 A(Sinatra 应用程序)中生成的小有效载荷放入路由 B。所以代码基本上是这样的: post "/routeA" do foo.save foo_i
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试为我的 Rails 应用程序的用户设置 OAuth 到 GetPocket ( http://getpocket.com )。 在 Pocket Authentication 文档 ( ht
我想使用 Faraday 发送一个带有 JSON 正文(用于搜索)的获取请求,但我收到了上述错误。我认为 Proc 中的 self 把事情搞砸了,但这与它无关。我正在关注 [faraday githu
我想向 API 发送 POST 请求。这是我的代码: conn = Faraday.new(url: BASE) do |faraday| faraday.response :logger f
作为我正在尝试编写的 Recipe (新手)的一部分,我使用 berks 安装来自其他 Recipe 的依赖项,最终当我运行时 berks install ,我遇到证书验证错误。任何人都可以帮助我知道
我将一个旧脚本迁移到一个新的 CentOS box 并在运行脚本时收到以下消息: Faraday: you may want to install system_timer for reliable
我正在尝试将一些代码从 HTTPParty 转换为 Faraday。以前我用的是: HTTParty.post("http://localhost/widgets.json", body: { nam
我是一名优秀的程序员,十分优秀!