Sample GET/POST Using Google AppEngine Java HttpConnection

A sample code on basic usage of HTTP GET/POST is always helpful.

I wrote once for AFNetworking (for iOS), which I subsequently referred to it myself. Hence, I am now writing for Google App Engine (Java).

Google provided documentation on http connection, but it is incomplete. Here’s my version.

GET

In my example, I want to get a JSON response for a Comment resource.

I showed how I set my custom headers, especially the Content-Type header. Then I read the response body by using BufferedReader, finally parse the string to JSONObject.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
try {
    URL url = new URL("https://api.myserver.com/v1/comments");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestProperty("X-Custom-Header", "xxx");
    connection.setRequestProperty("Content-Type", "application/json");

    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        // OK
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuffer res = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            res.append(line);
        }
        reader.close();

        JSONObject jsonObj = new JSONObject(res);
        String count = jsonObj.getInt("count");
        ...

    } else {
        // Server returned HTTP error code.
    }

} catch (Exception e) {
}

POST

Similarly, this is how you POST data.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
try {
    URL url = new URL("https://api.myserver.com/v1/comments");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestProperty("X-Custom-Header", "xxx");
    connection.setRequestProperty("Content-Type", "application/json");

    // POST the http body data
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
    writer.write("{\"comment\": \"awesome tutorial\"}");
    writer.close();

    if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        // OK
        BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuffer res = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            res.append(line);
        }
        reader.close();

        JSONObject jsonObj = new JSONObject(res);
        String count = jsonObj.getInt("count");
        ...

    } else {
        // Server returned HTTP error code.
    }

} catch (Exception e) {
}

Pitfalls

Google AppEngine always append to your User-Agent header, so as to identify the http request is from a particular AppEngine app. This is a bane because if you are crawling some website, they could easily block you since you can’t spoof your user-agent.

Comments