寻找一点帮助,我目前已经写了一个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 Change
- 2. Buffered Reader not reading
- 3. Buffered Reader inFromUser.Read()类型
- 4. Buffered Reader和Filepaths - Easy
- 5. 文本文件Buffered Reader
- 6. Java Buffered Reader来映射
- 7. 从文件获取数据 - Buffered Reader
- 8. 从SimpleClient http请求中使用Buffered Reader和org.json获取JSON,空指针
- 9. Buffered Reader只读取文本文件中的第一行?
- 10. Java从Buffered Reader创建字符串并比较字符串
- 11. java:使用Buffered Reader并检查字符串是否为空
- 12. Java Buffered Reader检测短语中的模式
- 13. Buffered Reader和字符串生成器如何工作?
- 14. Buffered reader和InputStreams的不同可能嵌套
- 15. 浏览器在Acrobat Reader的HTTP POST后挂起
- 16. Buffered Reader找到特定的行分隔符char然后读取该行
- 17. Java-Buffered Reader,如何使用br.readLine(System.in)读取一行并将其转换为char?
- 18. Buffered Writer - 在
- 19. Android ICS HTTP POST
- 20. HTTP POST
- 21. Http Post not working(Android)
- 22. android - http post content-length(json post)
- 23. Jquery Ajax HTTP Post
- 24. Android HTTP-POST
- 25. Http post request-body
- 26. Http POST在BlackBerry
- 27. Http Post with indy
- 28. HTTP post和wininet
- 29. HTTP POST错误
- 30. HTTP Post with Matlab
如果我可以多次写“借调”而不感到无聊,是的,那就是要走的路。 – 2009-10-16 19:12:43
对不起,我的意思是服务器不是客户端。 – Hugh 2009-10-16 19:44:12
尽管如此,Apache HttpComponents仍是一条可行之路。 – Bombe 2009-10-16 19:57:42