标准Java:位于java.net.*

标准Java,步骤如下

 

1:构建URL对象(本例中请求的完整URLhttp://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: 使用URLopenConnection()方法获取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标准底层接口进行封装而实现的一套网络编程接口,操作简单,功能强大,这里以getpost方法为例,步骤如下

  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方法完全一样,这里不再赘述。

posted on 2012-03-29 20:39  kongyouji  阅读(341)  评论(0)    收藏  举报