邮递员请求编码
我正在写我自己的HTTP服务器。 我正在使用Java Socket
。 我从下一条路读取InputStream
请求
val input = BufferedReader(InputStreamReader(socket.inputStream, "UTF-8"))
当我收到来自curl
或浏览器的请求时,一切都很好。 但是,当我收到Postman
请求,我得到这样的东西:
g # = g # , 9 3 5 / = 9 3 5 / ,
我试图使用其他编码的InputStreamReader
,如UTF-16
和ASCII
。 邮递员请求使用哪种编码,以及如何在服务器上读取邮件?
更新:对不起,这是我的失败。 我在提出请求时使用了HTTPS。
注:我的其他答案是更直接的,这是相关的HTTP服务器库在Kotlin中使用,以防其他人阅读这个问题,并想知道替代品。 不知道这是否是一个XY问题 ,如果作者不知道其他选项。
其他方式,如果你不想建立一个HTTP库,而是使用一个:
原始的HTTP框架:
- 任何为Java编写的东西,特别是:
- Undertow.io
- Vert.x 3与Vert.x-web
- Netty – 非常低的水平
比原始HTTP更多,但不是MVC或REST框架:
- 芥末 – 科特林具体
而对于更完整的REST或Web框架:
- KTOR – Kotlin具体
- Kovert – Kotlin具体,REST,但添加意见( 免责声明:我是作者 )
- Spark Java – Java在Kotlin中很好地工作
- Vert.x Nubes – Java,在Vert.x之上工作
- Kikaha – Java,在Undertow之上工作
如果收到的前两个字节是ASCII 31(0x1F)和139(0x8B),你正在接收一个GZIP流,并由于某种原因说服客户端,你支持GZIP Content-Encoding
(不同于字符集编码)。
数据看起来比字符编码更为二进制。 二进制数据的Gzip,deflate,SSL或其他原因是应该看的。
您可能无法正确进行内容协商,因此无法接收二进制gzip或deflate。 或者使用HTTPS与HTTP。 或上传图片。 东西,但不是文字。