现在,首先,我想了解是使用 HttpWebRequest 和 Response 更好,还是只使用 webbrowser 控件更好。大多数人似乎更喜欢使用 Web 浏览器,但是每当我询问人们时,他们都告诉我 HttpWebRequest 和 Response 更好。所以,如果这个问题可以通过切换到网络浏览器来避免(并且有充分的理由说明为什么它更好),请告诉我!
基本上,我设置了一个测试站点,用 PHP 编写,在本地主机上运行。它由三个文件组成....
第一个是 index.php,它只包含一个简单的登录表单,所有 session 和所有内容只是我测试 session 如何工作,所以它写得不是很好,就像我说的,它只是用于测试目的:
<?php
session_start();
$_SESSION['id'] = 2233;
?>
<form method="post" action="login.php">
U: <input type="text" name="username" />
<br />
P: <input type="password" name="password" />
<br />
<input type="submit" value="Log In" />
</form>
然后,我有 login.php(表单的操作),它看起来像:
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == "username" && $password == "password" && $_SESSION['id'] == 2233)
{
header('Location: loggedin.php');
die();
}
else
{
die('Incorrect login details');
}
?>
最后,loggedin.php 只显示“成功!” (使用
元素)。
如您所见,这是一个非常简单的测试,我拥有的许多东西都只是为了测试目的。
然后我转到我的 C# 代码。我创建了一个名为“HttpPost”的方法。看起来像:
private static string HttpPost(string url)
{
request = HttpWebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = cookies;
request.UserAgent = userAgent;
request.KeepAlive = keepAlive;
request.Method = "POST";
response = request.GetResponse() as HttpWebResponse;
if (response.StatusCode != HttpStatusCode.Found)
throw new Exception("Website not found");
StreamReader sr = new StreamReader(response.GetResponseStream());
return sr.ReadToEnd();
}
我构建了一个 Windows 窗体应用程序,因此在按钮的 Click 事件中,我想添加代码以使用适当的 URL 调用 HttpPost 方法。但是,我不太确定我应该在那里放什么才能让它登录。
谁能帮帮我?我也很感激一些关于以编程方式登录网站的一般指示!
最佳答案
您是否考虑过使用 WebClient ?
它提供了一组用于网页的抽象方法,包括 UploadValues,但我不确定这是否适合您的目的。
此外,最好不要使用 WebBrowser,因为它是一个可以执行脚本等的成熟网络浏览器; HttpWebRequest 和 WebClient 的重量要轻得多。
检查这个答案,我认为这正是您要找的。p>
来自上面链接的相关代码片段:
var client = new WebClient();
client.BaseAddress = @"https://www.site.com/any/base/url/";
var loginData = new NameValueCollection();
loginData.Add("login", "YourLogin");
loginData.Add("password", "YourPassword");
client.UploadValues("login.php", "POST", loginData);
关于c# - 在 C# 中使用 HttpWebRequest/Response 登录网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884158/