如何使用Ruby gem通过HTTP请求发送二进制数据?

伊戈尔·德·洛伦兹(Igor de Lorenzi)

我正在尝试寻找一种方法来重现HTTP请求,该请求在有效负载中发送二进制数据并设置Content-Type: binary标头,例如带有cURL的以下命令:

echo -e '\x14\x00\x00\x00\x70\x69\x6e\x67\x00\x00' | curl -X POST \
-H 'Content-Type: binary' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip,deflate,sdch' \
-H 'Accept-Language: en-US,en;q=0.8,pt;q=0.6' \
-H 'Cookie: JSESSIONID=m1q1hkaptxcqjuvruo5qugpf' \
--data-binary @- \
--url 'http://202.12.53.123' \
--trace-ascii /dev/stdout

我已经尝试使用REST客户端(https://github.com/rest-client/rest-client)和HTTPClient(https://github.com/nahi/httpclient),但未成功。使用服务器下面的代码以HTTP 500进行响应。以前有没有人做过这件事?或者是否有可能出于设计gem的目的?

Ruby代码:

require 'rest-client'
request = RestClient::Request.new(
  :method => :post, 
  :url => 'http://202.12.53.123', 
  :payload => %w[14 00 00 00 70 69 6e 67 00 00], 
  :headers => {
    :content_type => :binary,
    :accept => '*/*',
    :accept_encoding => 'gzip,deflate,sdch',
    :accept_language => 'en-US,en;q=0.8,pt;q=0.6',
    :cookies => {'JSESSIONID' => 'm1q1hkaptxcqjuvruo5qugpf'}
  }
)
request.execute

更新(带有一种可能的解决方案)

我最终使用HTTParty运行了请求(按照@DemonKingPiccolo给出的指示进行操作),该请求成功了。这是代码:

require 'httparty'
hex_data = "14 00 00 00 70 69 6e 67 00 00"
response = HTTParty.post(
  'http://202.12.53.123', 
  :headers => {
    'Content-Type' => 'binary',
    'Accept-Encoding' => 'gzip,deflate,sdch',
    'Accept-Language' => 'en-US,en;q=0.8,pt;q=0.6'
  },
  :cookies => {'JSESSIONID' => 'm1q1hkaptxcqjuvruo5qugpf'},
  :body => [hex_data.gsub(/\s+/,'')].pack('H*').force_encoding('ascii-8bit')
)
puts response.body, response.code, response.message, response.headers.inspect

正文也可以按照@gumbo的建议编写:

%w[14 00 00 00 70 69 6e 67 00 00].map { |h| h.to_i(16) }.map(&:chr).join
乔丹跑步

我只是尝试了一下,它就像一个魅力:

require "net/http"

uri = URI("http://example.com/")

http = Net::HTTP.new(uri.host, uri.port)

req = Net::HTTP::Post.new(uri.path)
req.body = "\x14\x00\x00\x00\x70\x69\x6e\x67\x00\x00"
req.content_type = "application/octet-stream"

http.request(req)
# => #<Net::HTTPOK 200 OK readbody=true>

我验证了使用RequestBin正确发布了数据

Net :: HTTP真的很粗糙,使用起来并没有太多乐趣(例如,您必须手动设置Cookie标头)。它的主要好处是它在标准库中。像RestClient或HTTParty这样的gem可能是一个更好的选择,而且我很确定它们中的任何一个都将至少同样容易地处理二进制数据。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:如何通过curl调用使用HTTP发布请求发送二进制数据(protobuf数据)

来自分类Dev

使用请求的Python HTTP请求二进制数据

来自分类Dev

如何在 node.js 中通过 HTTP 发送原始二进制数据?

来自分类Dev

如何发送二进制数据?

来自分类Dev

如何使用HTTP作为传输读取通过Avro序列化的二进制数据?

来自分类Dev

使用Spring-WebSockets是否可以通过WebSockets使用STOMP发送二进制数据?

来自分类Dev

使用Python通过套接字发送二进制数据

来自分类Dev

通过使用jQuery AJAX发送带有二进制数据的FormData

来自分类Dev

使用Cowboy和MessagePack通过WebSocket发送二进制数据

来自分类Dev

如何通过Cypress使用请求将二进制文件发送到服务器

来自分类Dev

使用HttpURLConnection发送二进制数据

来自分类Dev

如何使用请求库在请求中发布二进制数据?

来自分类Dev

如何通过使用二进制搜索C ++从二维数组输出数据?

来自分类Dev

如何使用socket.io发送二进制数据?

来自分类Dev

如何使用socket.io发送图像文件(二进制数据)?

来自分类Dev

如何归档二进制数据

来自分类Dev

如何使用Ruby on Rails验证二进制字段?

来自分类Dev

如何通过发布将图像二进制文件发送到API?节点js

来自分类Dev

通过POST请求使用NodeJS / ExpressJS处理二进制图像或文件

来自分类Dev

如何在纯 JavaScript 中发送二进制数据?

来自分类Dev

在Java / Android中使用套接字多次发送二进制数据

来自分类Dev

使用协议缓冲区发送二进制数据的正确方法是什么?

来自分类Dev

Axios 使用数据二进制格式发送我的纯 JSON

来自分类Dev

如何从Spring处理的POST请求中获取原始二进制数据?

来自分类Dev

通过HTTP在JavaScript中发送二进制数据

来自分类Dev

如何使用AnsiString存储二进制数据?

来自分类Dev

如何使用AFNetworking 2.0上传二进制数据

来自分类Dev

如何通过HDBC将二进制数据放入postgres?

来自分类Dev

如何通过python protobuf解析C ++ protobuf二进制数据?

Related 相关文章

  1. 1

    C ++:如何通过curl调用使用HTTP发布请求发送二进制数据(protobuf数据)

  2. 2

    使用请求的Python HTTP请求二进制数据

  3. 3

    如何在 node.js 中通过 HTTP 发送原始二进制数据?

  4. 4

    如何发送二进制数据?

  5. 5

    如何使用HTTP作为传输读取通过Avro序列化的二进制数据?

  6. 6

    使用Spring-WebSockets是否可以通过WebSockets使用STOMP发送二进制数据?

  7. 7

    使用Python通过套接字发送二进制数据

  8. 8

    通过使用jQuery AJAX发送带有二进制数据的FormData

  9. 9

    使用Cowboy和MessagePack通过WebSocket发送二进制数据

  10. 10

    如何通过Cypress使用请求将二进制文件发送到服务器

  11. 11

    使用HttpURLConnection发送二进制数据

  12. 12

    如何使用请求库在请求中发布二进制数据?

  13. 13

    如何通过使用二进制搜索C ++从二维数组输出数据?

  14. 14

    如何使用socket.io发送二进制数据?

  15. 15

    如何使用socket.io发送图像文件(二进制数据)?

  16. 16

    如何归档二进制数据

  17. 17

    如何使用Ruby on Rails验证二进制字段?

  18. 18

    如何通过发布将图像二进制文件发送到API?节点js

  19. 19

    通过POST请求使用NodeJS / ExpressJS处理二进制图像或文件

  20. 20

    如何在纯 JavaScript 中发送二进制数据?

  21. 21

    在Java / Android中使用套接字多次发送二进制数据

  22. 22

    使用协议缓冲区发送二进制数据的正确方法是什么?

  23. 23

    Axios 使用数据二进制格式发送我的纯 JSON

  24. 24

    如何从Spring处理的POST请求中获取原始二进制数据?

  25. 25

    通过HTTP在JavaScript中发送二进制数据

  26. 26

    如何使用AnsiString存储二进制数据?

  27. 27

    如何使用AFNetworking 2.0上传二进制数据

  28. 28

    如何通过HDBC将二进制数据放入postgres?

  29. 29

    如何通过python protobuf解析C ++ protobuf二进制数据?

热门标签

归档