使用 java.net

使用 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,可指定是否在不进行提示的情况下进行截断,或者在超出限制的情况下是否引发异常。

原文地址:https://www.cnblogs.com/lexus/p/2400926.html