检查API请求正文

时间:2018-05-28 14:45:34

标签: android httpurlconnection

我正在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&param2=b&param3=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;
}

1 个答案:

答案 0 :(得分:2)

首先,我强烈建议像@Luis Henriques所提到的那样使用像Retrofit这样的库。 Retrofit简化了构建手动URLConnections的许多复杂性。

那就是说,你几乎正在查看你的请求。如果您想要更精细的视图,我建议您将URL更改为您控制的主机(即家庭/办公室设置中的localhost)并通过Wireshark监控连接(确保将其作为HTTP而不是HTTPS请求。)

作为一个潜在的错误,您将urlParameters作为您的帖子。您不希望将URL参数作为URL的一部分吗?同时查看API documentationgrant_typepasswordusernameclient_id应该在您的帖子正文中未设置为请求属性。 setRequestProperty设置标题属性。