2024年3月21日发(作者:)

向指定URL发送GET方法的请求(java)

2010-03-04 15:44

向指定URL发送GET方法的请求

2009-10-21 13:28

使用Java发送GET、POST请求

——节选自《疯狂Java讲义》

URL的openConnection()方法将返回一个URLConnection对象,该对象表示应

用程序和 URL 之间的通信链接。程序可以通过URLConnection实例向该URL发

送请求、读取URL引用的资源。

通常创建一个和 URL 的连接,并发送请求、读取此 URL 引用的资源需要如下

几个步骤:

(1)通过调用URL对象openConnection()方法来创建URLConnection对象。

(2)设置URLConnection的参数和普通请求属性。

(3)如果只是发送GET方式请求,使用connect方法建立和远程资源之间的实

际连接即可;如果需要发送POST方式的请求,需要获取URLConnection实例对

应的输出流来发送请求参数。

(4)远程资源变为可用,程序可以访问远程资源的头字段、或通过输入流读取

远程资源的数据。

在建立和远程资源的实际连接之前,程序可以通过如下方法来设置请求头字段:

qsetAllowUserInteraction:设置该URLConnection的allowUserInteraction

请求头字段的值。

qsetDoInput:设置该URLConnection的doInput请求头字段的值。

qsetDoOutput:设置该URLConnection的doOutput请求头字段的值。

qsetIfModifiedSince:设置该URLConnection的ifModifiedSince请求头字段

的值。

qsetUseCaches:设置该URLConnection的useCaches请求头字段的值。

除此之外,还可以使用如下方法来设置、或增加通用头字段:

qsetRequestProperty(String key, String value):设置该URLConnection的

key请求头字段的值为value。如下代码所示:

uestProperty("accept" , "*/*")

qaddRequestProperty(String key, String value):为该URLConnection的

key请求头字段的增加value值,该方法并不会覆盖原请求头字段的值,而是

将新值追加到原请求头字段中。

当远程资源可用之后,程序可以使用以下方法用于访问头字段和内容:

qObject getContent():获取该URLConnection的内容。

qString getHeaderField(String name):获取指定响应头字段的值。

qgetInputStream():返回该URLConnection对应的输入流,用于获取

URLConnection响应的内容。

qgetOutputStream():返回该URLConnection对应的输出流,用于向

URLConnection发送请求参数。

注意:如果既要使用输入流读取URLConnection响应的内容,也要使用输出流

发送请求参数,一定要先使用输出流,再使用输入流。

getHeaderField方法用于根据响应头字段来返回对应的值。而某些头字段由于

经常需要访问,所以Java提供了以下方法来访问特定响应头字段的值:

qgetContentEncoding:获取content-encoding响应头字段的值。

qgetContentLength:获取content-length响应头字段的值。

qgetContentType:获取content-type响应头字段的值。

qgetDate():获取date响应头字段的值。

qgetExpiration():获取expires响应头字段的值。

qgetLastModified():获取last-modified响应头字段的值。

下面程序示范了如何向Web站点发送GET请求、POST请求,并从Web站点取得

响应的示例。

public class TestGetPost

{

/**

* 向指定URL发送GET方法的请求

* @param url 发送请求的URL

* @param param 请求参数,请求参数应该是name1=value1&name2=value2的形

式。

* @return URL所代表远程资源的响应

*/

public static String sendGet(String url , String param)

{

String result = "";

BufferedReader in = null;

try

{

String urlName = url + "?" + param;

URL realUrl = new URL(urlName);

//打开和URL之间的连接

URLConnection conn = nnection();

//设置通用的请求属性

uestProperty("accept", "*/*");

uestProperty("connection", "Keep-Alive");

uestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");

//建立实际的连接

t();

//获取所有响应头字段

Map> map = derFields();

//遍历所有的响应头字段

for (String key : ())

{

n(key + "--->" + (key));