Http协议POST阅读

时间:2015-12-19 16:58:10

标签: java http post

我试图在java中从POST读取数据。 我在registrationForm.html中有表格:

<form action="registratrationResult.html" method="post">
  Mail:<br>
  <input type="text" name="mail">
  <br>
  Password:<br>
  <input type="password" name="password">
  <input type="submit">
</form>

我想在不使用servlet的情况下在java中阅读此内容。我从浏览器中读到了所有内容,我得到了它:

>POST /registratrationResult.html HTTP/1.1
>Host: localhost:8080
>Connection: keep-alive
>Content-Length: 29
>Cache-Control: max-age=0
>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
>Origin: http://localhost:8080
>Upgrade-Insecure-Requests: 1
>User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
>Content-Type: application/x-www-form-urlencoded
>Referer: http://localhost:8080/registrationForm.html
>Accept-Encoding: gzip, deflate
>Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4

我读到应该有类似的东西:

parameter=value&also=another

如何获得它? 当我更改输入数据时,Content-Length正在改变。

1 个答案:

答案 0 :(得分:0)

正如你所说,实际的POST数据存储为键值对,但它们被放在请求体中而不是标题中。

使用cURL的示例:

$ curl --data "fname=stackoverflow&lname=user" --trace - http://www.w3schools.com/tags/demo_form_method_post.asp

请注意输出中的发送数据区域:

=> Send data, 30 bytes (0x1e)
0000: 66 6e 61 6d 65 3d 73 74 61 63 6b 6f 76 65 72 66 fname=stackoverf
0010: 6c 6f 77 26 6c 6e 61 6d 65 3d 75 73 65 72       low&lname=user
== Info: upload completely sent off: 30 out of 30 bytes

发布请求通常会以内容类型application/x-www-form-urlencoded发送,如发送标头中所述。