新手问题 TcpSocket 如果获取 Http 请求的整个内容

BadTudou · 2018年07月14日 · 最后由 BadTudou 回复于 2018年07月14日 · 152 次阅读

app.rb

require 'socket'

require_relative 'HttpRequest.rb'

server = TCPServer.new 80
while request = server.accept
   while (line = request.gets)
            p line
   end 
   request.close
end

发送的请求为:

POST  HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 9955d109-301b-476e-9bc5-2612c0ef5f5c

sss=sss&%E6%98%AF%E6%98%AF%E6%98%AF=%E6%98%AF+%E6%90%9C%E7%B4%A2

这样是无法获取sss=sss&%E6%98%AF%E6%98%AF%E6%98%AF=%E6%98%AF+%E6%90%9C%E7%B4%A2, 请问有什么办法能够获取整个Http request的内容么?

共收到 2 条回复

这个问题可以写一本书

你要先读 header (一直读到 "\r\n\r\n" 就是 header 结束了) 知道 transfer-encoding 是什么, 如果没有, 那就看 content-length 是多少, 读出这么多字节就读完 request body 了

transfer-encoding 如果是 chunked 就得一截一截的读, 每一截都以 16 字节的 chunk size 开头, 然后带上 chunk size 那么多字节.

luikore 回复

多谢,已经解决:根据内容长度读取剩下的内容即可

BadTudou 关闭了讨论 07月14日 20:51
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册