我有需要使用的java服务(不能修改它)和使用摘要HTTP授权的Web服务器。我正在使用HttpWebRequest与服务器通信(使用GET方法)。提供了身份验证所需的NetworkCredentials。但是调用GetResponse()会生成错误400(错误请求)。
地址:http://info.server.com/someFolder/servlet.do?cmd=get_info¶m=value
请求示例(不完整,只有相关内容):
获取/someFolder/servlet.do?cmd=get_info¶m=value HTTP / 1.1
主持人:info.server.com
回复:401需要授权
第二次请求:
获取/someFolder/servlet.do?cmd=get_info¶m=value HTTP / 1.1
主持人:info.server.com
授权:Digest ... uri =“/ someFolder / servlet.do”......(显然不完整标题)
第二次回复:400错误请求
我已经尝试过使用Web浏览器(IE,Firefox)的这个请求并且它可以工作,但似乎浏览器将整个请求uri放在Authorization标头的uri部分中,而HttpWebRequest如上所述格式化标头。 有谁知道如何强制HttpWebRequest将整个uri放在Authorization标头中? 或许这个问题还有另外一个解决方案?
感谢您的帮助!
答案 0 :(得分:0)
4GuysFromRolla的这篇文章似乎描述了为HttpWebRequest实现基本和摘要式身份验证。
答案 1 :(得分:0)
我们遇到了同样的问题,并将其跟踪到Authorization标头中的URL。看起来HttpWebRequest只发送主机名而不是完整的URL。它省略了:
?cmd=get_info¶m=value
来自网址。 IE8和Chrome都使用完整的URL,包括参数。
我们已经能够通过摘要授权的自定义实现来解决这个问题。请参阅this answer。