[英]Android HttpsURLConnection - simple POST request with parameters
[英]HttpsURLConnection - Send POST request
我想向该特定的API发送POST请求: https : //developer.lufthansa.com/docs/read/api_basics/Getting_Started ,我研究了如何执行此操作并尝试了所有方法,但它根本无法正常工作,我总是能得到HTTP 400或HTTP 401错误。 这是我的代码:
private void setAccessToken(String clientID, String clientSecret) {
try {
URL url = new URL(URL_BASE + "oauth/token");
String params = "client_id=" + clientID + "&client_secret=" + clientSecret + "&grant_type=client_credentials";
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());
osw.write(params);
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
} catch(IOException e) {
e.printStackTrace();
}
}
Kenta1561
似乎您的代码运行良好,并且可能是由于您提供了无效的clientID或clientSecret,从而使您在这种情况下得到了错误的响应(如401表示未授权)。 您可以做的一件事是,仅在http请求状态正常时才收到响应消息(200)。 在400或401 http响应状态的情况下,您也可能会收到无效的响应消息。 为了打印无效的响应消息,您可以遵循以下代码:
private void setAccessToken(String clientID, String clientSecret) throws Exception {
String params = "client_id=" + clientID + "&client_secret=" + clientSecret + "&grant_type=client_credentials";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
BufferedReader in;
// add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(params);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
if (responseCode >= 400)
in = new BufferedReader(new InputStreamReader(con.getErrorStream()));
else
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
}
这样您还可以获得无效的响应消息。 在您的情况下,当我尝试点击提供的api时,会给我以下响应:
{"error": "invalid_client"}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.