CookieContainer返回空

时间:2013-06-19 14:18:10

标签: c#

Hello Everyone我有以下代码

        Uri site = new Uri("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp");
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(site);
        CookieContainer cookies = new CookieContainer();
        request.CookieContainer = cookies;

        //Console.WriteLine(cookies.GetCookieHeader(site));

        //Get the response and print out the cookies again
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            Console.WriteLine(cookies.GetCookieHeader(site));
        }

        Console.Write("end");

        Console.ReadKey();

那么这段代码会返回Cookie,但是如果我将URI更改为http://www8.receita.fazenda.gov.br/SimplesNacional/Aplicacoes/ATBHE/ConsultaOptantes.app/ConsultarOpcao.aspx,则表明它没有正确显示它返回空

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

新网址上的服务器不会尝试设置任何Cookie,因此容器中当然没有Cookie。修改您的ASP代码以设置cookie,它将起作用。

答案 1 :(得分:0)

将以下内容添加到您的Cookie中:, domain=.receita.fazenda.gov.br。这表示您的Cookie可以与receita.fazenda.gov.br的任何子域一起使用。查看有关Cookie的RFC或使用此Wikipedia文章。

更新:重新阅读你的OP,可能有一些事情可能会出错。

有一件事是,在提出www8.receita.fazenda.gov.br请求时,网站没有设置cookie(如其他人所述)。或者,该网站未将发送的Cookie的domain字段与请求的响应设置为www.receita.fazenda.gov.br。我认为可能是前者 - 在提出请求时,Web服务器没有设置cookie。

另一件事可能是你忘了为正确的网站请求cookie标头?在上方,您有一行代码为Console.WriteLine(cookies.GetCookieHeader(site));,其中site被硬编码为与System.Uri不同的www8.receita.fazenda.gov.br。如果是这种情况,那么您要求的网站与提出请求的网站不同。