标准Java:位于java.net.*
标准Java,步骤如下
1:构建URL对象(本例中请求的完整URL是http://news.google.com.hk/nwshp?hl=zh-CN&tab=wn)
String strUrl = null;
下面给strUrl赋值,HTTP请求方式不同,即使是同一资源,URL也不同,此处,若是get请求方式,将strUrl 赋值为 strUrl = "http://news.google.com.hk/nwshp?hl=zh-CN&tab=wn";若是post请求方式,则strUrl = "http://news.google.com.hk/nwshp“
URL url = new URL(strUrl);
2: 使用URL的openConnection()方法获取HttpURLConnection对象
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
3:这一步需要根据客户端的请求方式的不同,进行不同的设置,以便获取服务器端的数据。这里以get()与 post()方法为例
get()方法:在第2步打开URL连接以后,get()方法不需要向服务器发送任何请求就可以直接获取服务器的 数据了(因为get()方法的请求参数已经在第一步构建URL对象时放在了URL对象里)
//得到输入流
InputStream input = urlConn.getInputStream();
//包装流对象
BufferedReader bufReader = new BufferedReader(new inputStreamReader(input));
//获取流中的数据
String resultData = "";
String line = null;
while((line = bufReader.readLine()) != null) {
resultData += line + "\n";
}
post方法:post()方法首先需要设置urlConn的属性,然后向服务器发送请求参数,最后获取数据
//设置参数
//设置输入输出流
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
//设置请求方式为post
urlConn.setRequestMethod("POST");
//设置post请求不能使用缓存
urlConn.setUseCaches(false);
urlConn.setInstanceFollowRedirects(true);
//设置http传输的数据类型Content-Type,通常,如果传输是字符数据,一般设置为application/x-www-form-urlencoded,如果传输的是对象,则一般设置为application/x-java-serialized-oblect。本例中设置为application/x-www-form-urlencoded
urlConn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
//与服务器连接
urlConn.connect();
//获取输出流,向服务器发送请求参数
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream);
//发送的请求参数
String content = “hl=” + URLEncoder(“zh-CN&”) + “tab=” + URLEncoder(wn);
//将要上传的内容写入到流中
Out.writeBytes(content);
//刷新,关闭
Out.flush();
Out.close();
//接下来与get方法一样,从服务器端获取数据,这里不再赘述。这里补充一点,客户端的请求数据是在客户端调用getInputStream()时发送过去的,之前一直放在内存中。
Apache:位于org.apache.http.*
Apache是将Java标准底层接口进行封装而实现的一套网络编程接口,操作简单,功能强大,这里以get与post方法为例,步骤如下
Get方法:
//请求地址
String url = http://news.google.com.hk/nwshp?hl=zh-CN&tab=wn;
//生成get请求对象HttpGet
HttpGet httpRequest = new HttpGet(url);
//生成默认的客户端对象HttpClient
HttpClient httpClient = new DefaultHttpClient();
//向服务器发送请求对象,同时获取服务器应答对象
HttpResponse httpResponse = httpClient.execute(httpRequest);
//获取服务器应答对象的状态信息,判断是否请求成功,若请求成功,则获取服务器回复的数据
if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
//获取应答对象的实体,也就是装载了回复内容的类
HttpEntity httpEntity = httpResponse.getEntity();
//从实体中提取回复信息
String resultData = EntityUtils.toString(httpEntity);
}
//如果请求状态不是SC_OK,则表示此次请求失败
else {
}
Post方法:
//生成post请求对象HttpPost
String url = “http://news.google.com.hk/nwshp”;
HttpPost httpRequest = new HttpPost(url);
//为post对象设置请求参数
//使用NameValuePair来存储要传递的参数键值对
List<NameValuePair> params = new ArrayList< NameValuePair >;
//添加参数键值对
Params.add(new BasicNameValuePair(“hl”, “zh-CN”));
Params.add(new BasicNameValuePair(“tab”, “wn”));
//将参数集合以特定的编码方式转换成实体,此处的实体是请求实体
HttpEntity httpEntity = new UrlEncodedFormEntity(params, “UTF-8”);
//设置请求对象的请求实体,也就是设置请求内容
httpRequest.setEntity(httpEntity);
//生成默认的客户端对象
HttpClient httpClient = new DefaultHttpClient();
//向服务器发送请求对象,并获取服务器的应答对象
HttpResponse httpResponse = httpClient.execute(httpRequest);
//接下来就是判断应答对象的状态,看是否请求成功,若成功,则获取应答数据,与get方法完全一样,这里不再赘述。
浙公网安备 33010602011771号