2009-08-31 40 views
3

我有以下代码可以创建xmlhttp类的服务器端对象。我正尝试连接到需要基本身份验证的站点。我能够得到这个与下面的代码一起工作。XmlHttp请求基本身份验证问题

有什么问题?那么我使用公开电话传递凭证。仅这一点是不够的。我还必须使用手动计算的base64编码用户名:密码组合来设置授权标头。如果我尝试设置标头而不将凭据传递给公开呼叫,则会失败。叫我疯了,但是当我将证书传递给公开的时候,这就是我应该做的。如果我设置标题,那就是我应该做的。对?做这两件事似乎是不对的。对?

这是一个错误还是一个小故障?

另外的背景是: IIS 5 & ASP经典 收到的错误时,这两个项目被省略的一个是HTTP状态401: “您无权查看此页 您没有权限查看此目录或页面使用您提供的凭据,因为您的Web浏览器正在发送Web服务器未配置为接受的WWW-Authenticate标头字段。“

由于IIS发出请求我不能用Fiddler检查它:-(

Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") 
xmlhttp.setTimeouts 5000, 5000, 10000, 10000 'ms - resolve, connect, send, receive 
xmlhttp.open "GET", "http://example.com/", False, "username", "password" 
xmlhttp.setRequestHeader "Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" 
xmlhttp.send 
+1

您当然可以检查这样的请求与Fiddler。ServerXMLHTTP基于WinHTTP;请参阅http://www.fiddler2.com/fiddler/help/hookup.asp#Q-WinH TTP – EricLaw 2009-08-31 20:21:14

+1

@Eric:尽管OP需要在IIS服务器上这样做,他可能会或可能没有权限执行此操作。 – AnthonyWJones 2009-09-01 08:41:51

回答

3

我相信你打,可以归结为MSXML2 this已知的限制(或错误)缺乏(或不正确)支持“协商”的身份验证机制,这意味着您必须通过自己添加授权标题来强制执行该问题(绕过错误执行的协商),因为您正在执行此操作。

+0

谢谢,这个链接总结了我完美的体验。我认为这是发生了什么,我只是想确保我不会弄脏事情。 – 2009-08-31 18:14:54

+0

直接使用WinHTTP COM对象也有同样的问题。我不敢相信这个问题很久以前就没有解决。 – Bob77 2010-01-18 04:33:26