在向Web服务器发送信息时,通常有两个命令会被用到:GET和POST。
在使用GET命令时,只需将参数附在URL的结尾处即可。格式如下
1 | http://host/script?parameters |
其中每个参数都具有“名字=值”的形式,而且这些参数之间用&字符分隔开。参数的值遵循以下规则。使用URL编码模式进行编码
- 保留字符A-Z、a-z、1-9以及. - * _
- 用+字符替换所有的空格。
- 将其他所有字符编码为UTF-8,并将每个字节都编码为%后面紧跟一个两位的十六进制数字。例如,若要发送街道名S. Main, 可以使用S%2e+Main,因为十六进制数2e是“.”的ASCII码值
使用POST命令时,并不需要在URL中添加任何参数,而是从URLConnection中获取输出流并将名-值对写入该流中。当然,仍然需要对这些值进行编码,并用&字符将它们隔开。过程如下
1 | URL url= new URL("http://host/script"); |
最后,调用getInputStream方法读取服务器的响应,在读取响应的过程中有个问题,若脚本运行出现错误,那么connection.getInputStream()时就会抛出一个FileNotFoundException异常,但是此时服务器依然会向浏览器发送一个错误页面。为了捕获该异常,可以将URLConnection对象转型为HTTPURLConnection类并调用它的getErrorStream方法
1 | InputStream err = ((HttpURLConnection)connection).getErrorStream() |
URLConnection对象首先向服务器发送了一个请求头,当提交表单数据时,请求头必须包含:
1 | Content-Type: application/x-www-form-urlencoded |
而POST的请求头还必须包括内容的长度
1 | Content-Length: 124 |
请求头必须以空白行结尾,紧跟其后的才是数据部分
示例程序如下
1 | import java.awt.*; |