2

我正在使用 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 请求。

4

1 回答 1

0

前面的 GET 请求很可能是 Location 标头重定向。

为什么不使用 System.Net.WebClient 类。 C# 控制台/服务器访问网站 该链接向您展示了如何扩展 WebClient 以保留 cookie 信息。

于 2012-10-23T19:00:28.153 回答