2016-01-21 53 views
0

我在写我自己的HTTP服务器。我正在使用Java Socket。我读了InputStream下一个方式邮差请求编码

val input = BufferedReader(InputStreamReader(socket.inputStream, "UTF-8")) 

要求当我收到来自curl或浏览器的请求一切都很好。但是,当我从Postman收到请求,我得到这样的:

��g�������#���=��g�������#���, ��9� ��3���5�/�=��9� ��3���5�/�, 

我尝试使用其他的编码为诸如InputStreamReaderUTF-16ASCII。邮递员请求使用哪种编码,以及如何在服务器上读取邮件?

更新:对不起,这是我的失败。我在提出请求时使用了HTTPS。

+1

的顶部工作中的问题有所准备“为什么会有人写自己的HTTP服务器时,他们可以ü选择Java的百个库之一呢?“题。 –

+0

你可以说前几个字节是数字吗? –

+0

你能分享邮递员发送给服务器的HTTP头吗? –

回答

1

如果收到的前两个字节是ASCII 31(0x1F的)和139(0x8B)您收到一个GZIP流,由于某种原因,相信你支持GZIP Content-Encoding(不是一回事charset编码)客户​​端。

数据看起来比字符编码更为二进制。 Gzip,deflate,SSL或二进制数据的其他原因是应该考虑的。

您可能没有正确地进行内容协商,因此接收到二进制gzip或deflate。或者使用HTTPS与HTTP。或上传图片。一些东西,但不是文字。

1

注意:我的其他答案是更直接的,这是相关的HTTP服务器库在Kotlin中使用,以防其他人阅读这个问题并想知道替代方案。不知道这是否是XY problem以及作者是否不知道其他选项。

,如果你不希望建立一个HTTP库,而是使用其他方法之一:

原始HTTP框架:

一定程度上比原始HTTP多,但不是一个MVC或REST框架:

而对于更全面的REST或Web框架:

  • KTOR - 科特林具体
  • Kovert - 科特林具体,REST但添加视图(免责声明:我是作者
  • Spark Java - Java中,很好地工作在科特林
  • Vert.x Nubes - 爪哇,去努力Vert.x
  • 的顶部
  • Kikaha - Java中,对暗潮