寻找一点帮助,我目前已经写了一个HTTP服务器。它目前正确处理GET请求。然而,在使用POST时,缓冲读取器似乎挂起。当请求停止时,输入流的其余部分通过缓冲读取器读取。我在谷歌上发现了一些东西。我曾尝试将CRLF和协议版本从1.1更改为1.0(浏览器自动将请求作为1.1),我们将不胜感激。谢谢Buffered Reader HTTP POST
3
A
回答
1
这不安全!但是展示了如何在初始HTTP头之后的输入流期间获取POST数据。
这也只适用于POST数据来作为“例如=真&坏=假”等
private HashMap hashMap = new HashMap();
private StringBuffer buff = new StringBuffer();
private int c = 0;
private String[] post; public PostInputStream(InputStream in) {
try {
//Initalizes avaliable buff
if (in.available() != 0) {
this.buff.appendCodePoint((this.c = in.read()));
while (0 != in.available()) {
//Console.output(buff.toString());
buff.appendCodePoint((this.c = in.read()));
}
this.post = buff.toString().split("&");
for (int i = 0; i < this.post.length; i++) {
String[] n = this.post[i].split("=");
if (n.length == 2) {
hashMap.put(URLDecoder.decode(n[0], "UTF-8"), URLDecoder.decode(n[1], "UTF-8"));
} else {
Console.error("Malformed Post Request.");
}
}
} else {
Console.error("No POST Data");
}
} catch (Exception e) {
e.printStackTrace();
}
}
2
不会写我自己的实现。请看下面的现有的组件,如果你想:
- 一个HTTP客户端:Apache HttpClient
- 一个HTTP服务器实现:Apache HttpComponents core(由气罐提到的)
7
我与汉斯同意,你应该使用一个标准和经过充分测试的库来做到这一点。但是,如果您正在编写服务器以了解HTTP,请参阅您想做的事情。
你真的不能使用BufferedReader,因为它会缓冲输入并可能从套接字读取太多字节。这就是为什么你的代码挂起,BufferedReader试图读取比在套接字上可用的字节更多的字节(因为POST数据没有行结束),并且它正在等待更多字节(这将永远不可用) 。
简单地解析POST请求的方法是使用InputStream的直接
对于每个线在头 一次读一个字节,直到到达一个“\ r”和然后a'\ n'
查找以“Content-Length:”开头的行,提取该行末尾的数字。
当你得到一个空的标题行时,你就完成了标题。
现在准确读取来自Content-Length标题的字节数。现在
你可以写你的回应。
0
正如karoroberts说你必须检查在POST发送的内容的长度。但你仍然可以使用BufferedReader。
只是要检查的Content-Length头它的大小和读完所有的头,你可以设置大小的字符数组,使帖子内容的阅读后:
的char [ ] buffer = new char [contentLength]; 请求。读(缓冲液);
其中请求是BufferedReader。 如果您需要字符串中的POST内容,您可以使用:String.valueOf(buffer);
注意:BufferedReader.read返回字符的整数,因此您可以检查Content-Length标头是否存在不一致。
相关问题
- 1. Buffered Reader not reading
- 2. Buffered Reader Change
- 3. Buffered Reader inFromUser.Read()类型
- 4. 文本文件Buffered Reader
- 5. Java Buffered Reader来映射
- 6. 从文件获取数据 - Buffered Reader
- 7. Buffered Reader只读取文本文件中的第一行?
- 8. Java Buffered Reader检测短语中的模式
- 9. Buffered reader和InputStreams的不同可能嵌套
- 10. 浏览器在Acrobat Reader的HTTP POST后挂起
- 11. HTTP POST
- 12. android - http post content-length(json post)
- 13. HTTP Post issue
- 14. Jquery Ajax HTTP Post
- 15. PHP JSON HTTP POST
- 16. http POST与asp.net
- 17. HTTP POST with HttpWebRequest
- 18. POST HTTP响应
- 19. Grails Http Post
- 20. Http POST在BlackBerry
- 21. Http post Angular2
- 22. HTTP post和wininet
- 23. $ http post in Angular.js
- 24. http post .then()
- 25. WCF BasicHttpBinding Http Post
- 26. SOAP和HTTP Post
- 27. HTTP POST请求
- 28. http post request erlang
- 29. Angularjs $ http post promise
- 30. 响应HTTP POST
如果我可以多次写“借调”而不感到无聊,是的,那就是要走的路。 – 2009-10-16 19:12:43
对不起,我的意思是服务器不是客户端。 – Hugh 2009-10-16 19:44:12
尽管如此,Apache HttpComponents仍是一条可行之路。 – Bombe 2009-10-16 19:57:42