CookieContainer导致C#中的HttpWebResponse request.GetResponse()错误

时间:2015-09-01 23:22:29

标签: c# authentication cookies

我正在使用基本身份验证从网站检索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()

0 个答案:

没有答案