HttpClient4 访问需要basic auth 资源 出现405错误

王威 发布于 2011/10/13 13:49
阅读 2K+
收藏 0

java代码如下:

HttpGet get = new HttpGet(url);
        try {
            HttpClient client = getHttpClientInstance();
            //设置代理对象 ip/代理名称,端口    
            client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(host)); 
            //实例化验证    
            CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
            //设定验证内容    
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(key,secret); 
            //创建验证    
            credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds); 
            ((DefaultHttpClient) client).setCredentialsProvider(credsProvider);
            HttpResponse httpResponse = client.execute(get);

首先这个url通过浏览器  然后认证后 是可以拿到数据的  但是用httpClient 返回 405

 

请教各位大侠指点啊  急....

 

加载中
0
sxgkwei
sxgkwei
你确认是get方法访问,而不是post?
王威
王威
@sxgkwei : 呵呵 大错了 失误,是只有get能拿到数据
sxgkwei
sxgkwei
@王威 : 你的语意前后矛盾了,我不知道怎么说了。你说了确定是get,但又说测试过post确实能拿到数据,既然post能拿到数据,那就说明是post撒,你又确定是get,我不懂了。。
王威
王威
我用firefox post插件 测过 只有post 能拿到数据。httpclient那段代码页应该没问题啊 因为其他的一样需要auth的api 我都用那段代码成功的得到数据了
王威
王威
嗯 ,确定是get
0
王威
王威

问题已经解决   :

 但还有困惑,之前的是先构造CredentialsProvider 然后 ((DefaultHttpClient) client).setCredentialsProvider(credsProvider);

我把这段代码改成:((DefaultHttpClient) client).getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),new UsernamePasswordCredentials(key,secret));

 

这样的话  就能成功的经过认证 得到api返回的数据。

 

0
sxgkwei
sxgkwei

引用来自“王威”的答案

问题已经解决   :

 但还有困惑,之前的是先构造CredentialsProvider 然后 ((DefaultHttpClient) client).setCredentialsProvider(credsProvider);

我把这段代码改成:((DefaultHttpClient) client).getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),new UsernamePasswordCredentials(key,secret));

 

这样的话  就能成功的经过认证 得到api返回的数据。

 

哦哦。懂起你意思了,你意思就是说CredentialsProvider对象必须从HttpClient对象获得的,和HttpClient对象有内部联系,然后设置CredentialsProvider对象的一些东西,访问才行,你开始那种new一个 CredentialsProvider和HttpClient对象没有内在联系的,弄进去访问不行。对么?
王威
王威
@sxgkwei : client暴露出来的有set方法。并且那么写还成功过。先解决当前问题吧,有空在研究研究那到底怎么回事
sxgkwei
sxgkwei
嘿嘿,我估计通过client自身获得的那个玩意儿,可能和自身有内在联系,你直接new的肯定就没有撒
王威
王威
嗯,我也是尝试才得出这个结果。貌似从道理上 这两种写法是一样的。有空了看看client 对CredentialProvider 对象 怎么赋值的,估计就明白为什么了。之所以困惑是因为第一种写法,去call另一个api的时候 竟然是好使的 ,所以郁闷了...
返回顶部
顶部