您的位置:首页 > 编程语言 > Java开发

一起来学REST(12.2)——Java中使用REST

2011-08-27 23:52 211 查看
原文地址:http://rest.elkstein.org/

Learn REST: A Tutorial

发送HTTP GET请求

主要的类是HttpURLConnection,通过对一个URL调用openConnection可以得到这个类,openConnection方法的签名指向一个超类URLConnection,我们还需要对其进行类类型向下转型。

下面的方法发送一个请求,并且返回一个长字符串:

public static String httpGet(String urlStr) throws IOException {
  URL url = new URL(urlStr);
  HttpURLConnection conn =
      (HttpURLConnection) url.openConnection();

  if (conn.getResponseCode() != 200) {
    throw new IOException(conn.getResponseMessage());
  }

  // Buffer the result into a string
  BufferedReader rd = new BufferedReader(
      new InputStreamReader(conn.getInputStream()));
  StringBuilder sb = new StringBuilder();
  String line;
  while ((line = rd.readLine()) != null) {
    sb.append(line);
  }
  rd.close();

  conn.disconnect();
  return sb.toString();
}

(这段代码有些粗糙,需要加上适当的try/catch/finally来保证reader可以关闭,等等。

记住,如果URL包含参数,必须进行适当的编码(例如空格是%20,等等)。类URLEncoder用来进行这样的编码。

发送HTTP POST请求

在POST请求中的URL也需要编码,如下面的方法所示:

public static String httpPost(String urlStr, String[] paramName,
String[] paramVal) throws Exception {
  URL url = new URL(urlStr);
  HttpURLConnection conn =
      (HttpURLConnection) url.openConnection();
  conn.setRequestMethod("POST");
  conn.setDoOutput(true);
  conn.setDoInput(true);
  conn.setUseCaches(false);
  conn.setAllowUserInteraction(false);
  conn.setRequestProperty("Content-Type",
      "application/x-www-form-urlencoded");

  // Create the form content
  OutputStream out = conn.getOutputStream();
  Writer writer = new OutputStreamWriter(out, "UTF-8");
  for (int i = 0; i < paramName.length; i++) {
    writer.write(paramName[i]);
    writer.write("=");
    writer.write(URLEncoder.encode(paramVal[i], "UTF-8"));
    writer.write("&");
  }
  writer.close();
  out.close();

  if (conn.getResponseCode() != 200) {
    throw new IOException(conn.getResponseMessage());
  }

  // Buffer the result into a string
  BufferedReader rd = new BufferedReader(
      new InputStreamReader(conn.getInputStream()));
  StringBuilder sb = new StringBuilder();
  String line;
  while ((line = rd.readLine()) != null) {
    sb.append(line);
  }
  rd.close();

  conn.disconnect();
  return sb.toString();
}

As you can see, it's not a pretty site (and that's before adding proper try/catch/finally structures). The problem is that, out of the box, Java's support for handling web connections is pretty low-level.

A good solution can be found in the popular
Apache Commons library, and in particular the
httpclient set of packages. See
Yahoo! guide to REST with Java for details and examples. The documentation covers several interesting extras, such ascaching.

By Dr. M. Elkstein
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: