尋找一點幫助,我目前已經寫了一個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