为什么我的基本身份验证在POST上工作,而不是GET请求?

时间:2011-08-17 19:12:25

标签: java android http httpclient http-authentication

下面是我用来调用REST API的方法。它适用于POST(即param isHttpPOST = true),并返回服务器的结果(需要基本身份验证)。

但是当使用GET代码路径(isHttpPOST = false)时,身份验证失败,就好像我根本没有提供凭据一样。我无法理解为什么,因为授权代码适用于POST和GET。

在GET请求上进行身份验证还需要做什么?

private static HttpResponse makeHttpApiCall(String url, String json, boolean isHttpPOST, String username, String password)
{
    DefaultHttpClient httpClient = new DefaultHttpClient();
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password);
    httpClient.getCredentialsProvider().setCredentials(new AuthScope("blah.com", 80), creds);
    HttpResponse response;
    try {
        if ( isHttpPOST )
        {
            HttpPost httppost    = new HttpPost(url);
            StringEntity se = new StringEntity(json);
            se.setContentEncoding("UTF-8");
            httppost.setHeader("Content-Type", "application/json");
            httppost.setEntity(se);
            response = httpClient.execute(httppost);
        }
        else
        {
            HttpGet get = new HttpGet(url);
            response = httpClient.execute(get);
        }
    } catch (ClientProtocolException e) {
        Trace.e(TAG, "There was a protocol based error making API call", e);
        return null;
    } catch (IOException e) {
        Trace.e(TAG, "There was an IO Stream related error making API call", e);
        return null;
    } catch (Exception e) {
        Trace.e(TAG, "Failed to get a response from API call (unknown error)", e);
        return null;
    }
    return response;

}

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但反过来说,它适用于GET但不适用于POST。

如果服务器是您的,我建议使用名为Wireshark的免费软件来检查传输本身的情况。

使用该工具,向我显示客户端在发出第二个授权请求之前有时会发出第一个匿名请求,但是服务器有点失去并且没有响应..我仍然无法解决这个问题..它是让我疯了。