我正在使用基本身份验证从网站检索xml订单信息。网站端点URL接收身份验证,然后重定向到包含订单信息的URL。我可以成功验证但不能检索订单信息(我得到一个空白页面,状态为200.注意:如果我直接导航到重定向的URL而没有首先进入处理身份验证的URL,这与我在浏览器中得到的结果相同)。我相信这是因为我需要处理身份验证cookie。但是,只要我将cookie容器添加到我的请求中,request.GetResponse()就会发生内部服务器错误500的爆炸。
我已经使用Fiddler测试了url端点,并且得到了与我不向我的请求添加cookie容器时相同的结果。验证成功,然后重定向的页面为空白,状态代码为200.(P.S.我可以告诉Fiddler这个cookie是HttpOnly)
但是,如果我使用网络浏览器并在初始网址上输入凭据,则会重定向到订单页面并显示订单内容。
问题1:如果我的代码或订单端点出现问题,如何确定(或进一步排除故障)?
问题2:如果我的代码出现问题,我应该如何处理Cookie?
我的代码:
public void Main()
{
Uri endpointUri = new Uri(Dts.Variables["User::endpointUrl"].Value.ToString());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpointUri);
request.Method = "GET"; //I have also tried POST
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.MaximumAutomaticRedirections = 1;
SetBasicAuthHeader(request, Dts.Variables["User::endpointUsername"].Value.ToString(), Dts.Variables["User::endpointPassword"].Value.ToString());
request.CookieContainer = new CookieContainer(); //If I comment out this line, the error does not occur, but I also don't see any order info.
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
Stream dataStream = response.GetResponseStream();
Debug.WriteLine((new System.IO.StreamReader(dataStream)).ReadToEnd());
return;
}
}
public void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)
{
string authInfo = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(userName + ":" + userPassword));
req.Headers["Authorization"] = "Basic " + authInfo;
}
错误:
远程服务器返回错误:(500)内部服务器错误 System.Net.HttpWebRequest.GetResponse()