c# - 网站登录和抓取 HTML

标签 c# authentication web-scraping httpwebrequest

我有点卡在这里。我正忙于制作一个从网站读取数据的 Windows 应用程序。然而,de 网站需要先登录,我似乎无法获得通过。我对编程还很陌生,所以我希望有人知道解决方案。

这是我用来登录的代码:

private void btnLogin2_Click(object sender, EventArgs e)
    {
        HttpWebRequest request = WebRequest.Create(LoginPageURL) as HttpWebRequest;
        request.KeepAlive = true;
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36";
        string postData = "j_username=" + number + "&j_password=" + password;
        byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
        request.ContentLength = dataBytes.Length;
        using (Stream postStream = request.GetRequestStream())
        {
            postStream.Write(dataBytes, 0, dataBytes.Length);
        }
        HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse;
        request = WebRequest.Create(Page2URL) as HttpWebRequest;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36";
        request.CookieContainer = new CookieContainer();
        request.CookieContainer.Add(httpResponse.Cookies);
        request.Method = "GET";
        HttpWebResponse httpResponse2 = request.GetResponse() as HttpWebResponse;
        StreamReader stream = new StreamReader(httpResponse2.GetResponseStream(), System.Text.Encoding.UTF8);
        string result = stream.ReadToEnd();
        stream.Close();

        tbOutput2.Text = result;



    }

重点是我在登录后获取页面的 HTML (Page2URL)。但我一直从登录页面获取 HTML。

最佳答案

您正在将 cookie 添加到来自第一个响应的请求中:

request.CookieContainer.Add(httpResponse.Cookies);

可能响应中的 cookie 为空!为了解决这个问题,从响应头中读取 cookie 值并将它们添加到下一个请求中,如下所示:

 string response_header_cookies = response.Headers.Get("Set-Cookie")    
 req.Headers.Add("Cookie",response_header_cookies); 

在大多数情况下,这是更有效的方法。希望这可以帮助! 来源:msdn

关于c# - 网站登录和抓取 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469060/

相关文章:

c# - 如何在这样一个简单的字符串中分别获取整数和字符?

java - java中基于表单的身份验证的困惑

xml - 抓取分层数据

authentication - 我应该如何为 Electron 桌面应用程序实现用户身份验证/角色?

authentication - Neo4j 浏览器的凭据是什么

php - 如何抓取包含无效 HTML 的网站

javascript - 使用 Jquery 将 Javascript 加载到 Div 中

c# - 使用 TryGetProperty 时忽略大小写

c# - 获取页面已通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点 '.well-known/openid-configuration'

c# - 从多播数据包中获取发送者 ip