HTTP 从 API 获取对 XML 的请求
HTTP Get request for XML from API
我对 API 调用 java 请求 XML 特别陌生,所以我使用的是模板。可以在下面看到。
但是,现在我从另一个网站 API 调用 API,他们要求我使用我一无所知的 python,或者使用 3rd party HTTP web client。相反,我希望 API 的调用在我的 java 应用程序本身内。是否可以使用以下 headers?
更改以下代码
Sample request URL: http:// datamall.mytransport.sg/ltaodataservice.svc/TravelTimeSet
Request headers: AccountKey=xxx, UniqueUserId=xxx, accept=application/atom+xml
NowCast.java *NowCast.java 链接到 SAX 解析器
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class NowCast extends SAXParser {
public static void main(String[] args) {
String datasetName, keyRef;
datasetName = "Nowcast";
keyRef = "781CF461BB6606ADEA6B1B4F3228DE9DB26ABF1B1B755E93";
NowCast od = new NowCast();
try {
od.callWebAPI(datasetName, keyRef);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void callWebAPI(String datasetName, String keyRef) throws Exception {
// Step 1: Construct URL
String url = "http://www.nea.gov.sg/api/WebAPI?dataset=" + datasetName
+ "&keyref=" + keyRef;
// Step 2: Call API Url
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
// Step 3: Check the response status
if (responseCode == 200) {
// Step 3a: If response status == 200
// print the received xml
super.Parserr(con.getInputStream());
System.out.println(readStream(con.getInputStream()));
} else {
// Step 3b: If response status != 200
// print the error received from server
System.out.println("Error in accessing API - "
+ readStream(con.getErrorStream()));
}
}
// Read the responded result
private String readStream(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
return response.toString();
}
}
我 cross-referenced python 代码(在 API 文档中)与上面的代码一起解决了问题
在java
中设置请求headers
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("AccountKey", "zIIkxPOqBRxnkH97G6ZGlA==");
con.setRequestProperty("UniqueUserID", "5ccef4a0-10e2-4f75-8f4d-2be67885b10f");
con.setRequestProperty("accept", "application/atom+xml");
我对 API 调用 java 请求 XML 特别陌生,所以我使用的是模板。可以在下面看到。
但是,现在我从另一个网站 API 调用 API,他们要求我使用我一无所知的 python,或者使用 3rd party HTTP web client。相反,我希望 API 的调用在我的 java 应用程序本身内。是否可以使用以下 headers?
更改以下代码Sample request URL: http:// datamall.mytransport.sg/ltaodataservice.svc/TravelTimeSet
Request headers: AccountKey=xxx, UniqueUserId=xxx, accept=application/atom+xml
NowCast.java *NowCast.java 链接到 SAX 解析器
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class NowCast extends SAXParser {
public static void main(String[] args) {
String datasetName, keyRef;
datasetName = "Nowcast";
keyRef = "781CF461BB6606ADEA6B1B4F3228DE9DB26ABF1B1B755E93";
NowCast od = new NowCast();
try {
od.callWebAPI(datasetName, keyRef);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void callWebAPI(String datasetName, String keyRef) throws Exception {
// Step 1: Construct URL
String url = "http://www.nea.gov.sg/api/WebAPI?dataset=" + datasetName
+ "&keyref=" + keyRef;
// Step 2: Call API Url
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
// Step 3: Check the response status
if (responseCode == 200) {
// Step 3a: If response status == 200
// print the received xml
super.Parserr(con.getInputStream());
System.out.println(readStream(con.getInputStream()));
} else {
// Step 3b: If response status != 200
// print the error received from server
System.out.println("Error in accessing API - "
+ readStream(con.getErrorStream()));
}
}
// Read the responded result
private String readStream(InputStream inputStream) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
return response.toString();
}
}
我 cross-referenced python 代码(在 API 文档中)与上面的代码一起解决了问题
在java
中设置请求headersURL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("AccountKey", "zIIkxPOqBRxnkH97G6ZGlA==");
con.setRequestProperty("UniqueUserID", "5ccef4a0-10e2-4f75-8f4d-2be67885b10f");
con.setRequestProperty("accept", "application/atom+xml");