10

Apache HttpComponents を使用して Web サービスにアクセスしていますが、リクエストでユーザー/パスワードを設定する方法がわかりません。コードは次のとおりです。

URI url = new URI(query);
HttpGet httpget = new HttpGet(url);

DefaultHttpClient httpclient = new DefaultHttpClient();
Credentials defaultcreds = new UsernamePasswordCredentials("test", "test");
httpclient.getCredentialsProvider().setCredentials(new AuthScope(HOST, AuthScope.ANY_PORT), defaultcreds);

HttpResponse response = httpclient.execute(httpget);

..

それでも 401 の不正なエラーが発生しました。

HTTP/1.1 401 Unauthorized [Server: Apache-Coyote/1.1, Pragma: No-cache, Cache-Control: no-cache, Expires: Wed, 31 Dec 1969 16:00:00 PST, WWW-Authenticate: Basic realm="MemoryRealm", Content-Type: text/html;charset=utf-8, Content-Length: 954, Date: Wed, 04 Apr 2012 02:28:49 GMT]

ユーザー/パスワードを設定する正しい方法かどうかわかりませんか? 誰でも助けることができますか?ありがとう。

4

1 に答える 1

4

あなたは正しい軌道に乗っていると思います。httpエラー応答は、おそらくユーザー名/パスワードが正しくないか、ユーザーにリソースへのアクセス権限がないことを意味する可能性があるため、ユーザー資格情報を確認する必要があります。基本的なhttp認証を行う以下のコードがあり、正常に動作しています。

import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;


public class Authentication
{

    public static void main(String[] args)
    {

        DefaultHttpClient dhttpclient = new DefaultHttpClient();

        String username = "abc";
        String password = "def";
        String host = "abc.example.com";
        String uri = "http://abc.example.com/protected";

        try
        {
            dhttpclient.getCredentialsProvider().setCredentials(new AuthScope(host, AuthScope.ANY_PORT), new UsernamePasswordCredentials(username, password));
            HttpGet dhttpget = new HttpGet(uri);

            System.out.println("executing request " + dhttpget.getRequestLine());
            HttpResponse dresponse = dhttpclient.execute(dhttpget);

            System.out.println(dresponse.getStatusLine()    );
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            dhttpclient.getConnectionManager().shutdown();
        }

    }

}
于 2012-04-04T05:00:14.807 に答える