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

BadTudou · July 14, 2018 · Last by BadTudou replied at July 14, 2018 · 1014 hits

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 的内容么?

这个问题可以写一本书

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

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

Reply to luikore

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

BadTudou closed this topic. 14 Jul 20:51
You need to Sign in before reply, if you don't have an account, please Sign up first.