使用 java.net - Google App Engine - Google 代码
使用 java.net
您可以使用 Java 标准库中的 java.net.URLConnection,通过 Java 应用程序创建 HTTP 和 HTTPS 连接。App Engine 使用网址提取服务实现该接口。
有关 java.net 的详细信息,请参阅 Sun 的 java.net.URLConnection 文档。
对于网址的简单请求
获取某网址的页面内容的一种简单方法是创建 java.net.URL 对象,然后调用其
openStream()
方法。该方法可处理创建连接、发出 HTTP GET 请求以及检索响应数据的详情。import java.net.MalformedURLException; import java.net.URL; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; // ... try { URL url = new URL("http://www.example.com/atom.xml"); BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String line; while ((line = reader.readLine()) != null) { // ... } reader.close(); } catch (MalformedURLException e) { // ... } catch (IOException e) { // ... }使用 HttpURLConnection
对于更复杂的请求,您可以调用网址对象的
openConnection()
方法以获取 URLConnection 对象。在发出请求之前,您可以用更多信息准备此对象。要进行请求,请调用 URLConnection 上的方法,如getInputStream()
或getOutputStream()
。App Engine 的 URLConnection 实现不会与远程主机保持永久连接。当应用程序设置请求数据或写入输出流时,请求数据保存在内存中。当应用程序访问有关响应的任何数据时,如获得输入流(或调用
connect()
方法),App Engine 通过请求数据调用网址提取服务,获得响应,关闭连接并返回响应数据。以下示例通过某些表单数据对网址发出 HTTP POST 请求。
import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStreamWriter; // ... String message = URLEncoder.encode("my message", "UTF-8"); try { URL url = new URL("http://www.example.com/comment"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod("POST"); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write("message=" + message); writer.close(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { // OK } else { // Server returned HTTP error code. } } catch (MalformedURLException e) { // ... } catch (IOException e) { // ... }设置请求标头
要在传出请求上设置 HTTP 标头,请调用 HttpURLConnection 的
setRequestProperty()
方法。connection.setRequestProperty("X-MyApp-Version", "2.7.3");重定向
默认情况下,HttpURLConnection 将遵循 HTTP 重定向。网址提取服务将遵循最多 5 个重定向。
要停用以下重定向,请调用 HttpURLConnection 的
setInstanceFollowRedirects()
方法。connection.setInstanceFollowRedirects(false);不支持的 java.net 功能
网址提取服务不支持永久 HTTP 连接。当应用程序使用 URLConnection 对象访问响应数据时,App Engine 调用网址提取服务来完成请求。在访问了响应数据之后,无法修改请求数据。
应用程序无法为请求设置显式连接超时。
低级 API 的功能
网址提取服务限制了传出请求和传入响应的数据大小。使用 java.net API 时,将在不进行提示的情况下截断大于该限制的数据。通过低级网址提取 API,可指定是否在不进行提示的情况下进行截断,或者在超出限制的情况下是否引发异常。