我想在Android应用程序中使用旅行Api
第一测试线束演示API密钥(prtl6749387986743898559646983194)返回200,成功创建会话并轮询会话
然而,当使用Dashboard私有API密钥时,它返回429 Too many request
有什么我需要做的使用私有API密钥?
我代码:public void run(String u) {
try {
// SystemClock.sleep(500);
url = new URL(u);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setConnectTimeout(50 * 1000);
connection.setReadTimeout(50 * 1000);
connection.setRequestProperty("Cache-Control", "no-store");
connection.setRequestProperty("Cache-Control", "no-cache");
// connection.setRequestProperty("If-None-Match", "no-store");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept", "application/xml");
connection.setRequestProperty("charset", "utf-8");
/* connection.setUseCaches(true);
connection.setDoOutput(true);*/
Log.v("Response", " parameter = " + Parameters);
byte[] postData = Parameters.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));
OutputStream os = connection.getOutputStream();
os.write(postData);
os.flush();
// SystemClock.sleep(500);
int responseCode = connection.getResponseCode();
Log.v("Response", "Sending 'POST' request to URL : " + url);
Log.v("Response", "Post parameters : " + Parameters);
Log.v("Response", "Response Code : " + responseCode);
Log.v("Response", "Message : " + connection.getResponseMessage());
String result = connection.getHeaderField("Location");
SettionKey = connection.getHeaderField("Location").substring(result.indexOf("v1.0/") + 5, result.length());
Log.v("Response", "SessionKey = " + SettionKey);
connection.disconnect();
// SystemClock.sleep(500);
} catch (IOException e) {
Log.v("Response", "Post Dead");
}
}
public void get(String url) {
try {
Log.v("Response", "get");
String url1 = url + "/" + SettionKey + "/?apiKey=" + apiKey;
URL url2 = new URL(url1);
HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
Log.v("Response", "url = " + url1);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded.");
connection.setRequestProperty("Accept", "application/xml");
connection.setRequestProperty("Cache-Control", "no-cache");
connection.setUseCaches(true);
connection.setDefaultUseCaches(true);
connection.setDoInput(true);
int responseCode = connection.getResponseCode();
Log.v("Response", " " + connection.getHeaderFields());
Log.v("Response", "code = " + responseCode);
Log.v("Response", connection.getResponseMessage());
code = responseCode + connection.getResponseMessage();
Flight.put("code", code);
InputStream is = null;
try {
is = new BufferedInputStream(connection.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
setlist(br);
//Log.v("Response","result = "+inputLine.toString());
} catch (IOException e) {
Log.v("Response", "read Dead.. ");
}
connection.disconnect();
} catch (IOException e) {
Log.v("Response", "GET Dead ");
}
}
我也有同样的问题。然后我发现:
航班实时定价服务目前暂停。
你可以在这里查看
我的解决方案是使用demo apiKey进行开发,并等待他们的服务重新启动。
首先,我建议您使用Retrofit库处理http请求。它比你的方式更合适、更舒适、更快捷。与你的方法相比,它将使用10-15个代码字符串。你可以在这里找到:
改造IO和Github文档
以下是我在应用程序中使用的ScyScanner API的一些基本请求:
@GET("reference/v1.0/locales?" + Config.API_KEY)
Call<Locales> getLocales(@Header("Accept") String accept);
配置。API_KEY是配置类中的一些字符串,它持有我的API密钥。这个请求可以帮助您获取区域设置列表。
@GET("reference/v1.0/countries/{locale}?" + Config.API_KEY)
Call<Markets> getMarketCountries(@Header("Accept") String accept, @Path("locale") String locale);
获取市场国家
如果您在使用API密钥时遇到任何问题,请尝试获取新的密钥。它帮助了我。祝你好运!