c# - 在 C# 中使用 HttpWebRequest/Response 登录网站?

标签 c#

现在,首先,我想了解是使用 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 的重量要轻得多。

编辑:Login to website, via C#

检查这个答案,我认为这正是您要找的。

来自上面链接的相关代码片段:

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/

相关文章:

c# - 我该怎么做才能停止出现连接池错误

c# - 通用类型代码中的类型参数是否有命名约定(bracy flavoured)

c# - 在编辑模式下重新填充级联下拉列表 - MVC

c# - 为什么 "Sign the ClickOnce manifests"复选框在构建时默认选中?

c# - 我可以重定向到 [AcceptVerbs(HttpVerbs.Post)] ActionResult 吗?

c# - 可重载运算符 == 和 !=

C# String to DateTime 这种格式 2018-05-26T00 :00:00

c# - 在 Workflow Foundation 4 中管理 ObjectContext

c# - 如果以编程方式创建控件,则 Windows Media Player 视频为黑色

c# - 等待任务等于在 ContinueWith 中抛出错误任务的异常