我是编程 (C#) 的新手,我开始为 MMORPG 编写一个机器人来学习以编程方式与网站进行通信等等...
我在这里和那里发现了很多关于这个主题的问题。最后在帮助下,我可以找到一些东西并完成它,不幸的是它不起作用:(
方法:
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);
看来登录页面正在做一些事情,让它变得更复杂了! http://s2.kingsera.org
我们将不胜感激每一条评论/建议。 提前致谢。
最佳答案
我不会从技术上回答你的问题,但当我遇到这样的事情时,我会转向 Fiddler ,拦截您的计算机和远程服务器之间的网络流量。
这将允许您查看您的浏览器向远程服务器发出的确切请求及其所有 header 、cookie 数据等,以及您的代码向远程服务器发出的请求。
两个请求之间的差异应该向您展示解决问题的方法,或者至少为您提供大量额外信息以进行故障排除。
关于c# - 使用 Httpwebrequest 登录网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651063/