6.3. HTTP Communication¶
6.3.1. Dependencies¶
HTTP communication requires the NET foundation library and the HTTP Client add-on library.
To use them, add the following dependencies to your project’s module.ivy file:
<dependency org="ej.api" name="net" rev="1.1.2" />
<dependency org="ej.library.eclasspath" name="httpclient" rev="1.5.0" />
6.3.2. Replacing the javax.microedition.io.HttpConnection class¶
Code using javax.microedition.io.HttpConnection can use sun.net.www.protocol.http.HttpURLConnection instead.
6.3.2.1. Code sample¶
The following sample is extracted from the J2ME Javadoc.
void getViaHttpConnection(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
int rc;
try {
c = (HttpConnection)Connector.open(url);
// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = c.getResponseCode();
if (rc != HttpConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + rc);
}
is = c.openInputStream();
// Get the ContentType
String type = c.getType();
// Get the length and process the data
int len = (int)c.getLength();
if (len > 0) {
int actual = 0;
int bytesread = 0 ;
byte[] data = new byte[len];
while ((bytesread != len) && (actual != -1)) {
actual = is.read(data, bytesread, len - bytesread);
bytesread += actual;
}
} else {
int ch;
while ((ch = is.read()) != -1) {
...
}
}
} catch (ClassCastException e) {
throw new IllegalArgumentException("Not an HTTP URL");
} finally {
if (is != null)
is.close();
if (c != null)
c.close();
}
}
It can be adapted as follows:
void getViaHttpConnection(String url) throws IOException {
HttpURLConnection c = null;
InputStream is = null;
int rc;
try {
c = new HttpURLConnection(new URL(url));
// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = c.getResponseCode();
if (rc != HttpURLConnection.HTTP_OK) {
throw new IOException("HTTP response code: " + rc);
}
is = c.getInputStream();
// Get the ContentType
String type = c.getContentType();
// Get the length and process the data
int len = c.getContentLength();
if (len > 0) {
int actual = 0;
int bytesread = 0;
byte[] data = new byte[len];
while ((bytesread != len) && (actual != -1)) {
actual = is.read(data, bytesread, len - bytesread);
bytesread += actual;
}
} else {
int ch;
while ((ch = is.read()) != -1) {
...
}
}
} catch (ClassCastException e) {
throw new IllegalArgumentException("Not an HTTP URL");
} finally {
if (is != null) {
is.close();
}
if (c != null) {
c.disconnect();
}
}
}
6.3.2.2. HTTP Status Codes¶
HTTP Status Codes have the exact same names.
For instance, HttpConnection.HTTP_ACCEPTED corresponds to HttpURLConnection.HTTP_ACCEPTED, and HttpConnection.HTTP_FORBIDDEN corresponds to HttpURLConnection.HTTP_FORBIDDEN.
Warning
The following HTTP Status Codes are not available as static String in java.net.HttpURLConnection:
HTTP_EXPECT_FAILED(417)HTTP_TEMP_REDIRECT(307)HTTP_UNSUPPORTED_RANGE(416)
6.3.2.3. HTTP methods¶
setRequestMethod() and getRequestMethod() support more HTTP methods than their J2ME counterparts.
In addition to GET, POST and HEAD, the following methods are now supported:
OPTIONSPUTDELETETRACE
Note
HTTP method names are not provided as static String, so they need to be explicitly written when calling setRequestMethod() or checking the result of getRequestMethod().