我正在API EndPoint上执行HTTP Post请求。它是OAuth2协议的密码授权授权。
我找回了400代码,"错误请求" ..为了推进,我希望在Log.d声明中得到我正在进行的确切调用。我的问题是如何准确记录我正在制作的POST请求中的内容是什么?我不清楚如何这样做..这样我就可以开始调试..
我想找回像
这样的东西API Call Made =" https://api.allthingstalk.io/login/parameters" ..
现在这很难调试..
// This method gets the AccessToken from the API EndPoint, this token is encoded in a class Token with all its parameters..
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static Token getAccessToken () {
Token accessToken = null;
String urlParameters = "param1=a¶m2=b¶m3=c";
@SuppressLint({"NewApi", "LocalSuppress"}) byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
try {
URL url = new URL("https://api.allthingstalk.io/login");
HttpURLConnection client = null;
client = (HttpURLConnection) url.openConnection();
client.setRequestMethod("POST");
client.setRequestProperty("grant_type", "password");
client.setRequestProperty("username", username);
client.setRequestProperty("password", password);
client.setRequestProperty("client_id", "com.example.gebruiker.internetofthingsattplatform");
client.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");
client.setUseCaches(false);
client.setDoOutput(true);
int status = client.getResponseCode();
String status_String = Integer.toString(status);
Log.d(TAG, status_String);
OutputStream outputStream = new BufferedOutputStream(client.getOutputStream());
outputStream.write(postData);
String postData_String = postData.toString();
Log.d(TAG, postData_String);
outputStream.flush();
outputStream.close();
if (client != null) // Make sure the connection is not null.
client.disconnect();
}
catch(MalformedURLException error) {
}
catch(SocketTimeoutException error) {
}
catch (IOException error) {
}
return accessToken;
}
答案 0 :(得分:2)
首先,我强烈建议像@Luis Henriques所提到的那样使用像Retrofit这样的库。 Retrofit简化了构建手动URLConnections的许多复杂性。
那就是说,你几乎正在查看你的请求。如果您想要更精细的视图,我建议您将URL更改为您控制的主机(即家庭/办公室设置中的localhost)并通过Wireshark监控连接(确保将其作为HTTP而不是HTTPS请求。)
作为一个潜在的错误,您将urlParameters
作为您的帖子。您不希望将URL参数作为URL的一部分吗?同时查看API documentation:grant_type
,password
,username
和client_id
应该在您的帖子正文中未设置为请求属性。 setRequestProperty
设置标题属性。