Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的基本身份验证在POST上工作,而不是GET请求?_Java_Android_Http_Httpclient_Http Authentication - Fatal编程技术网

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

Java 为什么我的基本身份验证在POST上工作,而不是GET请求?,java,android,http,httpclient,http-authentication,Java,Android,Http,Httpclient,Http Authentication,下面是我用来调用RESTAPI的方法。它可以与POST一起工作(即param isHttpPOST=true),并从服务器返回结果(需要基本身份验证) 但是当使用GET代码路径(isHttpPOST=false)时,身份验证失败,就好像我根本没有提供任何凭证一样。我不明白为什么,因为身份验证代码适用于POST和GET 对GET请求进行身份验证还需要做什么 private static HttpResponse makeHttpApiCall(String url, String json, bo

下面是我用来调用RESTAPI的方法。它可以与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;

}

我也遇到了同样的问题,但反过来说,它对GET有效,但对POST无效

如果服务器是您的,我建议您使用一个名为Wireshark的免费软件来检查传输本身发生了什么


使用该工具,我发现客户机有时会在发出第二个授权请求之前发出第一个匿名请求,但随后服务器会丢失该请求而不响应。。我还是解决不了这个问题。。这让我发疯。

我也遇到了同样的问题,但反过来说,它在GET上有效,但在POST上无效

如果服务器是您的,我建议您使用一个名为Wireshark的免费软件来检查传输本身发生了什么


使用该工具,我发现客户机有时会在发出第二个授权请求之前发出第一个匿名请求,但随后服务器会丢失该请求而不响应。。我还是解决不了这个问题。。它快把我逼疯了。

可能是服务器端代码的问题?不,我可以使用curl“curl--user username:password”“访问内容。我建议最好使用调试器进入api,看看哪里出了问题。可能是服务器端代码的问题?不,我可以使用curl访问内容“curl--user username:password”“”我建议最好使用调试器进入api,看看哪里出了问题。