My favorites | 中文(繁體) | Sign in
英文版或許有比此中譯版新的內容

使用 java.net

您可以利用 java.net.URLConnection 從 Java 標準程式庫建立連線到 Java 應用程式的 HTTP 和 HTTPS 連線。「應用服務引擎」使用 URL 擷取服務實作此介面。

如需 java.net 的詳細資訊,請參閱 Sun 的 java.net.URLConnection 文件

使用 URL 進行簡單要求

取得 URL 中之頁面內容的最簡單方法,就是建立 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

如需更為複雜的要求資訊,您可以呼叫 URL 物件的 openConnection() 方法以取得 URLConnection 物件 (可能為 HttpURLConnection 或 HttpsURLConnection,視 URL 而定)。 您可以在發出要求前,先備妥此物件的額外資訊。若要進行要求,您可以呼叫 URLConnection 上的方法,例如 getInputStream()getOutputStream()

「應用服務引擎」的 URLConnection 實作不會在遠端主機上維護持續性連線。當應用程式設定要求資料或寫入輸出串流時,要求資料會記錄在記憶體中。當應用程式存取任何與回應相關的資料 (例如,取得輸出串流或呼叫 connect() 方法) 時,「應用服務引擎」會呼叫含要求資料的 URL 擷取服務、取得回應、關閉連線並傳回回應資料。

下列範例以部分格式資料發出 HTTP POST 要求給 URL:

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 重新導向。URL 擷取服務最多將進行 5 次重新導向。

若要停用下列重新導向,請呼叫 HttpURLConnection 的 setFollowRedirects() 方法:

        connection.setFollowRedirects(false);

不支援 java.net 功能

URL 擷取服務不支援持續性 HTTP 連線。當應用程式使用 URLConnection 物件存取回應資料時,「應用服務引擎」會呼叫 URL 擷取服務以完成要求。擷取回應資料之後,要求資料即無法修改。

應用程式無法為要求設定明確的連線逾時。

低階 API 的功能

URL 擷取服務會限制外寄要求和內送回應的資料大小。使用 java.net API 時,將以無訊息方式截斷超過限制的資料。低階 URL Fetch API (URL 擷取 API) 會讓您設定是否以無訊息方式截斷,或是否在超出限制時擲回例外狀況。