Почему моя базовая аутентификация работает на POST, а не на GET-запросах? - PullRequest
1 голос
/ 17 августа 2011

Ниже приведен метод, который я использую для вызова API REST.Он отлично работает с POST (то есть параметром 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 Ответ

1 голос
/ 29 августа 2011

У меня такая же проблема, но, наоборот, она работает на GET, но не на POST.

если сервер ваш, я бы порекомендовал использовать бесплатное программное обеспечение под названием Wireshark, чтобы проверить, что происходит в самой передаче.

, используя этот инструмент, показал мне, что клиент иногда делает первый анонимный запрос перед тем, как сделать второй авторизованный запрос, но затем сервер как бы теряет его и не отвечает .. я все еще не могу решить эту проблему .. это сводит меня с ума.

...