如何在C#中使用cookie执行简单的GET请求

时间:2012-03-06 16:06:25

标签: c# http cookies network-programming get

我发现的一切都是关于POST请求或不假设cookie。

我有这样的网址:

http://page.com/find/1,1,1,find.html?advanced=1&param1=val1&param2[]=val2

当放入浏览器时,这会将我引导至搜索结果页面。现在我想在C#程序中复制它。到目前为止我有这个:

WebRequest req = WebRequest.Create(url);
((HttpWebRequest)req).UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2";
req.Method = "GET";
WebResponse response = req.GetResponse();

当我运行它时,它会按预期返回“请登录”页面。但是其中一个参数存在问题。这是回复网址:

http://page.com/login.html?ref=find/1,1,1,find.html?advanced=1&param1=val1&param2=Array

所以,有两个问题:param2可能发生了什么?我如何添加cookie?

编辑:通过转换为HttpWebRequest来管理设置Cookie。

3 个答案:

答案 0 :(得分:1)

正如 devio 所说,你应该使用HttpWebRequest。我做了脏测试来检查它。

准备要发送的cookie。我提供给整个localhost:

HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://localhost/test.php");
rq.CookieContainer = new CookieContainer();
rq.CookieContainer.Add(new Cookie("test", "xxxx", "/", "localhost"));

您的脚本应设置Cookie以使其可用作为响应。你可以使用它们。

HttpWebResponse resp = (HttpWebResponse)rq.GetResponse();
foreach(var c in resp.Cookies)
{
    Debug("{0}: {1}", c.Name, c.Value);
}

答案 1 :(得分:0)

Cookie存储在HttpWebRequest.CookieContainerHttpWebResponse.Cookies属性中。

对于后续请求,您需要将响应的cookie添加到请求的cookie容器中。

答案 2 :(得分:0)

您可以使用以下代码段:

Cookie SessionCookie = new Cookie("{CookieName}", {Cookievalue})
{
    Domain = "{domain you want to hit}", Path = "/", Expired = false, HttpOnly = true 
};

CookieContainer SessionCookieHolder = new CookieContainer();

SessionCookie.Add(SessionCookie);

try
{
   HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("{URL}");
   WebReq.CookieContainer = SessionCookie;
   WebReq.Method = "GET/POST/HEAD"; //depending on the request type//
   WebReq.KeepAlive = true;
   HttpWebResponse Resp = (HttpWebResponse)WebReq.GetResponse();
}

catch(Exception ex)

{
   string ExceptionReader = ex.Message;
}