欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

用httpclient访问exchange服务器报错,大家帮忙看下!该怎么处理

更新时间: 2014-01-05 03:03:38 责任编辑: Author_N1

 

用HTTPClient访问exchange服务器报错,大家帮忙看下!
具体错误信息:
401 - 未授权: 由于凭据无效,访问被拒绝。
您无权使用所提供的凭据查看此目录或页面。
访问代码:
Java code

Protocol myHTTPS = new Protocol("https",
                    new MySecureProtocolSocketFactory(), 443);
            Protocol.registerProtocol("https", myHTTPS);
            // 设置连接参数
            HttpClient httpClient = new HttpClient();
            httpClient.getParams().setParameter(
                    HttpMethodParams.HTTP_CONTENT_CHARSET, "gbk");
            PostMethod postMethod = new PostMethod(mailServer
                    + "/owa/auth/owaauth.dll");
            postMethod.setRequestHeader("Content-Type",
                    "application/x-www-form-urlencoded");
            NameValuePair destination = new NameValuePair("destination",
                    mailServer + "/owa/");
            NameValuePair flag = new NameValuePair("flag", "0");
            NameValuePair forcedownlevel = new NameValuePair("forcedownlevel",
                    "0");
            NameValuePair trusted = new NameValuePair("trusted", "0");
            NameValuePair username = new NameValuePair("username", user);
            NameValuePair password = new NameValuePair("password", pw);
            NameValuePair[] FieldArr = new NameValuePair[] { destination, flag,
                    forcedownlevel, trusted, username, password };
            postMethod.addParameters(FieldArr);
            // 取邮件数
            int statusCode = httpClient.executeMethod(postMethod);
            GetMethod redirect = new GetMethod(mailServer + "/owa/");
            redirect.getParams().setParameter(
                    HttpMethodParams.HTTP_CONTENT_CHARSET, "gbk");
            httpClient.executeMethod(redirect);
            String str = redirect.getResponseBodyAsString();
            System.out.println(str);
            logger.debug(str);
            int start = str.indexOf("</a><span class=\"unrd\">");
            int end = str.indexOf(")</span></td></tr><tr>");
            if (start != -1 && end != -1) {
                start += "</a><span class=\"unrd\">".length();
                rtnStr = str.substring(start + 1, end);
            }
            postMethod.releaseConnection();
            httpClient = null;


返回值就是上面说的服务器错误信息。
但是我通过网页登陆是正常的,请问大家这是怎么回事!

--参考方法--
不是说你有user/password http client就自动会帮你验证的
你需要用诸如FBA之类的机制进行验证
不过我没有例子了,你自己检索一下FBA, Form based authentication


--参考方法--
你想用程序操作用户的邮箱?如果条件可以,尝试使用ews(exchange web services)吧。
登录owa很麻烦。

如果你真要走owa,用fiddler抓下包,看看到底传了什么数据过去。重要的是,你看看传过去的ID和密码是否被转换了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:03:38
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/17838/
本文WWW.DOC100.NET DOC100.NET版权所有。