3
回答
HttpClient4 访问需要basic auth 资源 出现405错误
【腾讯云】学生服务器套餐10元/月 >>>   

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

 

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

 

举报
王威
发帖于7年前 3回/2K+阅
共有3个答案 最后回答: 7年前
你确认是get方法访问,而不是post?
--- 共有 4 条评论 ---
王威@sxgkwei : 呵呵 大错了 失误,是只有get能拿到数据 7年前 回复
sxgkwei@王威 : 你的语意前后矛盾了,我不知道怎么说了。你说了确定是get,但又说测试过post确实能拿到数据,既然post能拿到数据,那就说明是post撒,你又确定是get,我不懂了。。 7年前 回复
王威我用firefox post插件 测过 只有post 能拿到数据。httpclient那段代码页应该没问题啊 因为其他的一样需要auth的api 我都用那段代码成功的得到数据了 7年前 回复
王威嗯 ,确定是get 7年前 回复

问题已经解决   :

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

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

 

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

 

引用来自“王威”的答案

问题已经解决   :

 但还有困惑,之前的是先构造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对象没有内在联系的,弄进去访问不行。对么?
--- 共有 3 条评论 ---
王威@sxgkwei : client暴露出来的有set方法。并且那么写还成功过。先解决当前问题吧,有空在研究研究那到底怎么回事 7年前 回复
sxgkwei嘿嘿,我估计通过client自身获得的那个玩意儿,可能和自身有内在联系,你直接new的肯定就没有撒 7年前 回复
王威嗯,我也是尝试才得出这个结果。貌似从道理上 这两种写法是一样的。有空了看看client 对CredentialProvider 对象 怎么赋值的,估计就明白为什么了。之所以困惑是因为第一种写法,去call另一个api的时候 竟然是好使的 ,所以郁闷了... 7年前 回复
顶部