如何在C#中使用cookie执行简单的GET请求
本文关键字:简单 执行 GET 请求 cookie | 更新日期: 2023-09-27 18:26:49
我发现的所有内容要么是关于POST请求,要么不假设有cookie。
我有一个这样的网址:
http://page.com/find/1,1,1,find.html?advanced=1¶m1=val1¶m2[]=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();
当我运行它时,它会像预期的那样返回一个"请登录"页面。但其中一个参数存在问题。这是响应URL:
http://page.com/login.html?ref=find/1,1,1,find.html?advanced=1¶m1=val1¶m2=Array
那么,有两个问题:param2可能发生了什么?我该如何添加cookie?
EDIT:通过强制转换为HttpWebRequest
来设置cookie。
Asdevio说您应该使用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);
}
您可以使用以下代码:
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;
}
Cookies存储在HttpWebRequest.CookieContainer和HttpWebResponse.Cookies属性中。
对于后续请求,您需要将响应的cookie添加到请求的cookie容器中。