C# 使用Httpwebrequest登录到网站
我是编程新手(C#),我开始为MMORPG编写一个机器人,学习如何通过编程与网站进行交流等等 我在这里和那里发现了很多关于这个话题的问题。最后,在一只援助之手的帮助下,我找到了一些东西并完成了它,但不幸的是,这些东西不起作用:( 方法:C# 使用Httpwebrequest登录到网站,c#,login,httpwebrequest,C#,Login,Httpwebrequest,我是编程新手(C#),我开始为MMORPG编写一个机器人,学习如何通过编程与网站进行交流等等 我在这里和那里发现了很多关于这个话题的问题。最后,在一只援助之手的帮助下,我找到了一些东西并完成了它,但不幸的是,这些东西不起作用:( 方法: public static CookieCollection GetCookie(HttpWebRequest request) { if (request.CookieContainer == null) {
public static CookieCollection GetCookie(HttpWebRequest request)
{
if (request.CookieContainer == null)
{ return new CookieContainer().GetCookies(request.RequestUri); }
else
{ return request.CookieContainer.GetCookies(request.RequestUri); }
}
public static CookieContainer GetCookie(HttpWebResponse response)
{
CookieContainer cookiecontainer = new CookieContainer();
cookiecontainer.Add(response.Cookies);
return cookiecontainer;
}
public static void SetCookie(HttpWebRequest request, CookieContainer cookie)
{
request.CookieContainer = cookie;
}
public static void SetCookie(HttpWebResponse response, CookieCollection cookie)
{
response.Cookies = cookie;
}
public static HttpWebResponse PostData(string uri,string request,CookieContainer cookie)
{
HttpWebRequest httprequest;
byte[] requestbytes;
Stream requeststream;
HttpWebResponse httpresponse;
httprequest = (HttpWebRequest)HttpWebRequest.Create(uri);
if (cookie == null)
{httprequest.CookieContainer=new CookieContainer();}
else
{httprequest.CookieContainer=cookie;}
httprequest.Method = "POST";
httprequest.ContentType = "application/x-www-form-urlencoded";
httprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19";
requestbytes = ASCIIEncoding.ASCII.GetBytes(request);
httprequest.ContentLength = requestbytes.Length;
requeststream=httprequest.GetRequestStream();
requeststream.Write(requestbytes,0,requestbytes.Length);
requeststream.Close();
httpresponse=(HttpWebResponse)httprequest.GetResponse();
if (!(httpresponse.Cookies.Count>0))
{ SetCookie(httpresponse, GetCookie(httprequest)); }
return httpresponse;
}
public static HttpWebResponse GetData(string uri, CookieContainer cookie)
{
HttpWebRequest httprequest;
HttpWebResponse httpresponse;
httprequest = (HttpWebRequest)HttpWebRequest.Create(uri);
if (cookie == null)
{ httprequest.CookieContainer = new CookieContainer(); }
else
{ httprequest.CookieContainer = cookie; }
httprequest.Method = "GET";
httprequest.ContentType = "application/x-www-form-urlencoded";
httprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19";
httpresponse = (HttpWebResponse)httprequest.GetResponse();
if (!(httpresponse.Cookies.Count > 0))
{ SetCookie(httpresponse, GetCookie(httprequest)); }
return httpresponse;
}
主要问题:
string uri = "http://s2.kingsera.org";
string userName = "someUserName";
string passWord = "somePassWord";
string postData = "signinUsername=" + userName + "&signinPassword=" + passWord + "&signinRemember=remember";
CookieContainer cookie = new CookieContainer();
HttpWebResponse response = PostData(uri, postData, cookie);
CookieContainer c = GetCookie(response);
似乎登录页面正在做一些事情,使其更加复杂
每一条评论/建议都将不胜感激。
提前谢谢。我不打算从技术上回答你的问题,但当我遇到类似的问题时,我会转向它,它会拦截你的计算机和远程服务器之间的web通信 这将允许您查看浏览器向远程服务器发出的确切请求及其所有标题、cookie数据等,以及代码向远程服务器发出的请求
这两个请求之间的差异应该会告诉您解决问题的方法,或者至少会为您提供许多额外的故障排除信息。我不打算从技术上回答您的问题,但当我遇到类似的问题时,我会转向,它会拦截您的计算机和远程服务器之间的web流量。 这将允许您查看浏览器向远程服务器发出的确切请求及其所有标题、cookie数据等,以及代码向远程服务器发出的请求
这两个请求之间的差异应该会告诉您解决问题的方法,或者至少会为您提供许多用于疑难解答的额外信息。您没有在属性中设置任何内容。事实上,我设置了。但它似乎与我在该类示例中看到的不同。您没有在属性中设置任何内容y、 嗯,事实上我有。但它似乎不像我在那个类的例子中看到的那样。谢谢你的提示,我想它有点像TamperData和Firebug,不是吗?@Musketer非常像-我不熟悉TamperData,但它与Firebug的网络选项卡非常相似,但它适用于所有HTTP流量,所以它非常适合签入通过比较找出请求。甚至可能是你的目标站点正在检查浏览器请求字符串或其他部分。如果你能欺骗自己的相同请求,你肯定会得到相同的响应。谢谢你的提示,我猜这有点像TamperData和Firebug,不是吗?@Musketer很像-我不熟悉TamperData,但是它的功能与Firebug的“网络”选项卡非常相似,但它适用于所有HTTP流量,因此,通过比较,它非常适合检出请求。甚至可能是您的目标站点正在检查浏览器请求字符串或其他部分。如果您能伪造相同的请求,您肯定会得到相同的响应。