编辑:此时它倾向于 HttpListener .. 它可能还必须通过 Sockets + webclient 或所有套接字完成 您必须发出 GET 请求以检索请求标头,仅此而已......套接字也可以允许服务器无需请求即可将内容推送给客户端,而这无法通过 webclients 完成*
我要做的是输入网站登录服务器的 url:大学校园、电子邮件、论坛、其他你每天需要的东西,并为他们创建一个工作登录。由于每个服务器可能不同,请求类型会发生变化:(即)://castRequest.ServicePoint.Expect100Continue = false; //castRequest.ContentType = "application/x-www-form-urlencoded" ;
如何从 C# 客户端找到这些必要的更改,而不是手动处理数据包和其他苛刻的方法?
我们开始... - 好的,你打开一个站点 - 没问题 - 你从 html 中获取一些登录标签,很容易.. - 现在我在哪里:你尝试登录的地方 - 发送用户/密码不是'不仅仅是这两件事的帖子——有时也不只是进入页面——还有 http 凭证、网络凭证和安全凭证 + USER/PW 凭证
html 用户/密码输入很容易解析出来:输入 type="password" name="password" id="password" size="15" value="">,回到 ---> how你会连接并确定服务器想要的所有请求吗?
我将如何分析和打开/关闭每个请求的这些请求以及如何从网络中获取数据:“application/x-www-form-urlencoded”?我还发现这并不总是返回与我通过某些浏览器或其他系统获得的相同#的 cookie。为什么???
必要的代码片段://BEGIN
通常这些网站都启用了 cookie,因此您使用启用了 cookie 的 WebClient:
namespace watcher
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//throw in a function create a cookie container:
void startRequest(){
CookieContainer cookieJar = new CookieContainer();
HTTP http = new HTTP(cookieJar);
}
public class HTTP : WebClient
{
public HTTP()
: this(new CookieContainer())
{ }
public HTTP(CookieContainer c)
{
CookieContainer = c;
}
public CookieContainer CookieContainer { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
var castRequest = request as HttpWebRequest;
if (castRequest != null)
{
castRequest.CookieContainer = CookieContainer;
//castRequest.ServicePoint.Expect100Continue = false;
//castRequest.ContentType = "application/x-www-form-urlencoded";
}
return request;
}
}
}