今天解决了一个关于下载时显示401的bug,主要的原因通过抓包分析得出是由于下载请求中没有Authorization。主要的原因是IE内核中接管下载请求后没有对其进行处理。而此时通过httpqueryinfo(flag设置为Authorization)查找失败。结果经过尝试发现要用internetqueryinfo
flag设置为查找用户名和密码,得到后进行base64处理然后格式化为“BASIC ” 。。。。(为base64后的用户名和密码)。下载正常。这里有个问题,第一次在没有basic的情况下,下载失败。为什么呢?
下面就是原因
什么是HTTP Basic Authentication?
直接看RFC2617。
在你访问一个需要HTTP Basic Authentication的URL的时候,如果你没有提供用户名和密码,服务器就会返回401,如果你直接在浏览器中打开,浏览器会提示你输入用户名和密码(google浏览器不会,bug?)。你可以尝试点击这个url看看效果:http://api.minicloud.com.cn/statuses/friends_timeline.xml
要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:
- 一是在请求头中添加Authorization:
Authorization: "Basic 用户名和密码的base64加密字符串" - 二是在url中添加用户名和密码:
http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml