文章目录
  1. 1. 标准Java:位于java.net.*
  2. 2. Apache:位于org.apache.http.*

这是一篇老文,在我的博客园里,现在移到此处

标准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 = "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()方法为例
    [1] get()方法:在第2步打开URL连接以后,get()方法不需要向服务器发送任何请求就可以直接获取服务器的 数据了(因为get()方法的请求参数已经在第一步构建URL对象时放在了URL对象里)
1
2
3
4
5
6
7
8
9
10
  //得到输入流
  InputStream input = urlConn.getInputStream();
  //包装流对象
  BufferedReader bufReader = new BufferedReader(new inputStreamReader(input));
  //获取流中的数据
  String resultData = "";
  String line = null;
  while((line = bufReader.readLine()) != null) {
  resultData += line + "\n";
  }

  [2] post方法:post()方法首先需要设置urlConn的属性,然后向服务器发送请求参数,最后获取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  //设置参数
  //设置输入输出流
  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方法为例,步骤如下
  [1] Get方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  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 {
  }

  [2] Post方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  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方法完全一样,这里不再赘述。

文章目录
  1. 1. 标准Java:位于java.net.*
  2. 2. Apache:位于org.apache.http.*