Skip to main content
 首页 » 编程设计

c#之HttpWebRequest 自动发送需要的HttpRequests

2024年01月01日50JeffreyZhao

我正在使用 HTTPWebRequest 模拟 POST 请求以登录网站。但是当使用 firebug 跟踪浏览器在登录期间正在做什么时,我发现它在登录后发出了一些 GetRequests。

所以我正在寻找的是如何让我的 POST 请求自动执行 GET 请求?

有人告诉我使用 JS 函数,但我对此一无所知。

private static async Task<byte[]> LoginAsync(string username, string password) 
{ 
    var postData = new NameValueCollection(); 
 
    var uri = new Uri(string.Format("http://{0}/", ServerName)); 
 
    postData.Add("name", username); 
    postData.Add("password", password); 
    postData.Add("login", ParseLoginId(await GetPage("login.php"))); 
 
    return await HttpHandler.UploadValuesTaskAsync(uri, postData); 
} 

我的 HTTP 处理程序

private CookieContainer _mContainer = new CookieContainer(); 
 
protected override WebRequest GetWebRequest(Uri address) 
{ 
    var request = base.GetWebRequest(address); 
    if (request is HttpWebRequest) 
    { 
        (request as HttpWebRequest).CookieContainer = _mContainer; 
    } 
    return request; 
} 
 
public void ClearCookies() 
{ 
    _mContainer = new CookieContainer(); 
} 

我正在使用上面的代码发送 POST 请求,但问题是它并没有完全模拟浏览器所做的...所以它不会在登录后自动发送所需的 GET 请求。

请您参考如下方法:

前面的 GET 请求可能是位置 header 重定向。

为什么不使用 System.Net.WebClient 类。 C# Console/Server access to web site 该链接向您展示了如何扩展 WebClient 以保留 cookie 信息。