Javaeye API的Http basic验证

   看到fins大牛写的JE talker以后,很有冲动自己也来写一下。我的UI设计还很差,还是先实现命令行的吧!

   我是采用HttpClient模拟get请求来获取数据,再用jsonlib解析数据。

   开始以为不难实现,不料开始就给我来了一个下马威!Http验证通不过,java eye api 验证采用的是HTTP Basic  Access Authentication,最常用也是最简单的http验证。通过wiki查看了一下原来就是把"username:password"经过Base64加密后,放在header中。当服务器接受请求后,再利用Base64Decode进行验证,不成功则返回httpcode为401。开始我怀疑是不是httpclient采用是不是basic验证。通过查看文档以后,httpclient默认优先采用basic验证。javaeye采用的是basic验证,http优先使用的也是basic验证,而程序死活儿不能通过验证,太奇怪了!

http://ssword.yo2.cn/2009/01/29/ruby%E4%BD%BF%E7%94%A8open-uri%E5%81%9Ahttp-basic%E9%AA%8C%E8%AF%81/中看到ruby的basic验证

   

require 'open-uri'
require 'base64'
f = open(url,"Authorization"=>"Basic #{Base64.b64encode("myaccount:mypassword")}")
puts f.read

 

原来的 写道
我自己试了一把,成功通过验证。借鉴网友的思路我把httpclient的basic验证也采用自己用Base64编码后方法放在header中还是通不过,后来发现原来apache的Base64算法和ruby的BASE64模块提供的算法不同,生成的串不同。

我对Base64编码方式不了解,恳请熟悉的帮忙分析一下

    首先向大家道个谦:

    java和ruby的BASE64编码算法得到的结果是一样的

    现在的问题是这样的:

   

  DefaultHttpClient httpclient = new DefaultHttpClient();
        httpclient.getCredentialsProvider().setCredentials(
        		AuthScope.ANY, 
                new UsernamePasswordCredentials("user", "password"));
//        CredentialsProvider provider = new BasicCredentialsProvider();
//        provider.setCredentials(new AuthScope("http://api.iteye.com/api/twitters/replies",80), new UsernamePasswordCredentials("user:password"));
   
       
        HttpGet httpget = new HttpGet("http://api.iteye.com/api/twitters/replies");

 

这样是通不过验证的

     提示:

     警告: Authentication error: Unable to respond to any of these challenges: {}
----------------------------------------
HTTP/1.1 401 Unauthorized
Response content length: 15

采用httpclient3

client.getState().setCredentials(
               AuthScope.ANY,
                new UsernamePasswordCredentials("user", "password")
            );

 

也通不过  提示:

 

<div style="padding:10px 10px">
        <p>您可能使用了网络爬虫抓取JavaEye网站页面!</p>
        <p>JavaEye网站不允许您使用网络爬虫对JavaEye进行恶意的网页抓取,请您立刻停止该抓取行为!</p>
        <p>如果您的网络爬虫不属于恶意抓取行为,希望JavaEye网站允许你进行网页抓取,请和JavaEye管理员联系,取得授权: webmaster AT javaeye DOT com</p>
        <p>如果您确实使用浏览器访问,但是被错误的识别为网络爬虫,希望将您浏览器发送的“User Agent”信息告知我们,帮助我们解决错误: webmaster AT javaeye DOT com</p>
      </div>

 只有当把验证串放在header中才能通过

   我对httpclient的验证了解不多,恳请高手帮我分析一下

你可能感兴趣的:(apache,算法,浏览器,SVN,Ruby)