Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 Android中的HttpClient身份验证_Java_Android_Apache_Authentication - Fatal编程技术网

Java Android中的HttpClient身份验证

Java Android中的HttpClient身份验证,java,android,apache,authentication,Java,Android,Apache,Authentication,我正在尝试使用Android在身份验证下从web获取XML。url如下所示: 但是,我得到了一些错误,并且显示服务器端没有响应,因为我无法访问经过身份验证的url。 错误:java.net.UnknownHostException:无法解析主机:没有与主机名关联的地址 所以,我尝试了3种方法,但都不奏效。 第一个是通过java.net验证器。 第二个是通过Apache凭据。 第三个。。。我不知道,我刚拿到 我知道第二个比第一个好,因为我正在使用HttpClient进行连接。或者也许有人可以向我解

我正在尝试使用Android在身份验证下从web获取XML。url如下所示:

但是,我得到了一些错误,并且显示服务器端没有响应,因为我无法访问经过身份验证的url。 错误:java.net.UnknownHostException:无法解析主机:没有与主机名关联的地址

所以,我尝试了3种方法,但都不奏效。 第一个是通过java.net验证器。 第二个是通过Apache凭据。 第三个。。。我不知道,我刚拿到

我知道第二个比第一个好,因为我正在使用HttpClient进行连接。或者也许有人可以向我解释哪一个更好用

代码如下:

public class ParseXML {

public String XMLUrlHttpRequest(String Url, final String userName, final String password) {
    String xml_string = null;
    String host = "host01";
    String domain ="abc-123";

    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        // --1--Authentication using Java.net
        Authenticator.setDefault(new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName,password.toCharArray());
            }});
        //--2--Authentication using Apache Credentials
        httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,new HttpHost(host,443));
        Credentials creds = new NTCredentials(userName, password,host,domain);
        httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,creds);

        //Http Request
        HttpGet httpGet = new HttpGet(Url);
        //--3-- Authentication after access to Url 
        httpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(userName, password), "UTF-8", false));

        //Http Response
        HttpResponse httpResponse = httpClient.execute(httpGet);    //<---- error here "java.net.UnknownHostException: Unable to resolve host :  No address associated with hostname"
        HttpEntity httpEntity = httpResponse.getEntity();
        xml_string = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
      ...

    return xml_string;
}
公共类解析XML{
公共字符串XMLUrlHttpRequest(字符串Url、最终字符串用户名、最终字符串密码){
字符串xml_String=null;
字符串host=“host01”;
字符串域=“abc-123”;
试一试{
DefaultHttpClient httpClient=新的DefaultHttpClient();
//--1--使用Java.net进行身份验证
setDefault(新验证器(){
受保护的密码身份验证getPasswordAuthentication(){
返回新的PasswordAuthentication(用户名、密码.toCharray());
}});
//--2—使用Apache凭据进行身份验证
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_代理,新的HttpHost(主机,443));
Credentials creds=新的NTCredentials(用户名、密码、主机、域);
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,creds);
//Http请求
HttpGet HttpGet=新的HttpGet(Url);
//--3——访问Url后的身份验证
httpGet.addHeader(BasicScheme.authenticate(新用户名密码凭证(用户名、密码),“UTF-8”,false));
//Http响应

HttpResponse HttpResponse=httpClient.execute(httpGet);//您的URL错误。您可以从Android浏览器测试它是否真的工作。
如果有效,您可以尝试使用HttpClient,而不是HttpClient。

您的URL错误。您可以在Android浏览器上测试它是否有效。
如果它有效,你可以尝试用它代替HttpClient。

也许这不是一个好答案,但它对我有效。为那些在同样情况下挣扎的人分享


使用Wi-fi,而不是通过usb连接到计算机网络,尽管他们使用相同的网络。这听起来很愚蠢,但我对此一无所知。

也许这不是一个好答案,但对我来说很有效。为那些在相同情况下挣扎的人分享


使用Wi-fi而不是通过usb连接到计算机网络,尽管它们使用相同的网络。这听起来很愚蠢,但我对此一无所知。

Url是正确的,但我需要以特定用户身份运行才能进入域。感谢您的回复。Url是正确的,但我需要以特定用户身份运行才能进入域。谢谢谢谢你的回复。