如何在没有浏览器的情况下与网站交互? [关闭]

2023-12-08

假设我正在构建一个 C# 应用程序。 申请目的:

  1. 从用户处获取用户名和密码。
  2. 并显示网站上存在的一些信息。

在后台,获取用户名和密码后,它应该:

  1. 使用这些凭据登录网站。
  2. 并单击登录后出现的锚链接。
  3. 找出保存信息的跨度。
  4. 获取信息。

这是一个例子。我实际上正在构建一个应用程序来显示带宽使用信息。 服务器不会为此公开任何 API。

是否有任何教程/信息/文章可用于类似目的?我只是不知道要搜索什么?


HttpWebRequest 的基本介绍

首先,您需要合适的工具来完成这项工作。去下载实时 HTTP 标头火狐浏览器插件。这将允许您实时查看 HTTP 标头,以便您可以查看与网站交互时发送的 POST 数据。了解发送到网站的数据后,您可以通过以编程方式创建自己的 HTTP Web 请求来模拟该过程。工具 > 实时 HTTP 标头

通过导航到加载实时 HTTP 标头工具 > 实时 HTTP 标头。一旦你加载了 GUI,导航到你想要登录的网站,我将使用Facebook出于演示目的。输入您的凭据以准备登录,但在此之前请清除 GUI 文本窗口并确保标记为复选框Capture已检查。点击登录后,您将看到文本窗口充斥着有关请求的各种信息,包括您需要的 POST 数据。

我发现最好点击保存全部...然后在文本文档中搜索您的用户名,以便您可以轻松识别 POST 数据。对于我的请求,POST 数据如下所示:

lsd=AVp-UAbD&display=&legacy_return=1&return_session=0&trynum=1&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C %D0%94%2C%D0%84&timezone=0&lgnrnd=214119_mDgc&lgnjs=1356154880&email=%myfacebookemail40outlook.com&pass=myfacebookpassword&default_persistent=0

然后可以在 C# 中定义如下:

StringBuilder postData = new StringBuilder();
postData.Append("lsd=AVqRGVie&display=");
postData.Append("&legacy_return=1");
postData.Append("&return_session=0");
postData.Append("&trynum=1");
postData.Append("&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84");
postData.Append("&timezone=0");
postData.Append("&lgnrnd=153743_eO6D");
postData.Append("&lgnjs=1355614667");
postData.Append(String.Format("&email={0}", "CUSTOM_EMAIL"));
postData.Append(String.Format("&pass={0}", "CUSTOM_PASSWORD"));
postData.Append("&default_persistent=0");

我的目的是向您展示我们可以通过 Web 浏览器“手动”发送的 POST 数据之间的关系,以及我们如何使用所述数据来模拟 C# 中的请求。了解发送 POST 数据远非确定性的。不同的网站以不同的方式工作,并且可以为您提供各种信息。下面是我整理的一个函数,用于验证 Facebook 凭据是否正确。我不能也不应该在这里深入探讨,因为课程及其成员都有很好的自我记录。关于所使用的方法,您可以找到比我能提供的更好的信息MSDN例如,WebRequest.Method 属性

    private bool ValidateFacebookCredentials(string email, string password)
    {
        CookieContainer cookies = new CookieContainer();
        HttpWebRequest request = null;
        HttpWebResponse response = null;
        string returnData = string.Empty;

        //Need to retrieve cookies first
        request = (HttpWebRequest)WebRequest.Create(new Uri("https://www.facebook.com/login.php?login_attempt=1"));
        request.Method = "GET";
        request.CookieContainer = cookies;
        response = (HttpWebResponse)request.GetResponse();

        //Set up the request
        request = (HttpWebRequest)WebRequest.Create(new Uri("https://www.facebook.com/login.php?login_attempt=1"));
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
        request.Referer = "https://www.facebook.com/login.php?login_attempt=1";
        request.AllowAutoRedirect = true;
        request.KeepAlive = true;
        request.CookieContainer = cookies;

        //Format the POST data
        StringBuilder postData = new StringBuilder();
        postData.Append("lsd=AVqRGVie&display=");
        postData.Append("&legacy_return=1");
        postData.Append("&return_session=0");
        postData.Append("&trynum=1");
        postData.Append("&charset_test=%E2%82%AC%2C%C2%B4%2C%E2%82%AC%2C%C2%B4%2C%E6%B0%B4%2C%D0%94%2C%D0%84");
        postData.Append("&timezone=0");
        postData.Append("&lgnrnd=153743_eO6D");
        postData.Append("&lgnjs=1355614667");
        postData.Append(String.Format("&email={0}", email));
        postData.Append(String.Format("&pass={0}", password));
        postData.Append("&default_persistent=0");

        //write the POST data to the stream
        using(StreamWriter writer = new StreamWriter(request.GetRequestStream()))
            writer.Write(postData.ToString());

        response = (HttpWebResponse)request.GetResponse();

        //Read the web page (HTML) that we retrieve after sending the request
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            returnData = reader.ReadToEnd();

        return !returnData.Contains("Please re-enter your password");
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有浏览器的情况下与网站交互? [关闭] 的相关文章

  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 为多语言 ASP.NET WebAPI 应用程序设置 CurrentCulture 的最佳位置

    基于这个问题 为多语言 ASP NET MVC Web 应用程序设置 CurrentCulture 的最佳位置 https stackoverflow com questions 8226514 best place to set curr
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • asp.net cookie、身份验证和会话超时

    我有一个使用表单身份验证的 asp net 网站 我在会话中保留一些信息 例如用户名 用户 ID 电子邮件等 我通过在身份验证 cookie 上设置较长的到期日期来允许用户保持登录网站的状态 因此 当用户仍处于身份验证状态时 会话过期的情况
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 错误 - 输入最多 1 个参数,但得到 3 个

    我设置了以下 for 循环来接受 5 个测试分数 我希望循环提示用户输入 5 个不同的分数 现在 我可以通过编写输入 请输入您的下一个测试分数 来做到这一点 但我宁愿让每个输入的分数提示其关联的数字 因此 对于第一个输入 我希望它显示 请输
  • 计算属性和闭包属性集之间的区别

    我是斯威夫特的新手 计算属性和设置为闭包的属性有什么区别 我知道计算属性每次都会重新计算 关闭时有什么不同吗 IE Closure var pushBehavior UIPushBehavior let lazilyCreatedPush
  • 如何在 C# 中创建上下文菜单

    我想使用 C 创建一个上下文菜单 该菜单将显示在节点旁边 类似于 Visual Studio 中发生的情况 我现在的代码导致主窗体闪烁 private void treeView1 MouseDown object sender Mouse
  • 将(长尾数)和(sbyte 指数)转换为十进制

    upd将我的版本放在最后的描述中 我需要将尾数和指数转换为十进制 这就是我的编码方式 long field Decimal Mantissa sbyte field Decimal Exponent decimal MDEntryPx fi
  • 如何获取当前视图 HTML 源并将其作为字符串传递 JSF ManagedBean

    我想获取当前视图 HTML 源并将其作为参数传递给 JSF 托管 bean 无论如何 JSF 我可以做到这一点吗 您无法在 JSF 中执行此操作 因为它根本不在 Web 浏览器中运行 最好的选择是使用 JavaScript 下面的示例在单击
  • 三星 Galaxy 蓝牙驱动程序

    我已经为 Android 编写了一个应用程序 主要部分是它通过蓝牙进行通信 我有四台设备 1 三星Galaxy S22 三星Galaxy Gio3 Netsurfer touch 南非本地生产的低端安卓平板电脑 4 摩托罗拉 ET1 现在我
  • 在 Angular 2 中调用组件刷新

    我正在尝试实现一个导航栏 根据用户是否登录显示不同的链接 我正在使用angular2 jwt图书馆提供了tokenNotExpired 功能 我有2条路线 home and login 我有一个导航栏组件 位于
  • 在 ClearCase UCM 中创建的两个基线

    我正在使用复合基线设置一个项目 当我创建发送到 主线 项目的基线时 它总是创建两个基线 一个称为 COMP BL 另一个称为 COMP BL 发生这种情况有原因吗 我的设置可能有问题吗 不 你的设置是正确的 它将始终按已更改的组件创建一个基
  • 同一行上多次按位移位导致的意外行为[重复]

    这个问题在这里已经有答案了 根据我是否将多个按位移位组合在一行上或将它们放在单独的行上 我会得到不同的结果 unsigned char a 73 a a lt lt 6 gt gt 2 printf d n a 当我期望 16 时打印 14
  • 通过用户脚本删除网站标题的一部分

    我尝试编写一个用户脚本这会删除网站标题 Flash 浏览器游戏 中的所有内容 但会删除开始操作时出现的倒计时 我是 Javascript 新手 需要一些帮助 UPDATE 正则表达式问题已解决 但我仍然需要一些帮助来让此脚本 监视 标题 以
  • 如何发出产生与 Firefox 相同的响应标头的 cURL 请求

    当我使用 Firefox 浏览页面并单击下载链接时 在网络检查器中检查请求时会显示以下标头 Connection keep alive Content Disposition attachment filename example file
  • 如何在 SwiftUI 或无限列表视图中实现列表分页?

    我需要有关如何在 SwiftUI 中实现无限列表滚动或分页列表的帮助 提前致谢 你最好的选择是使用 onAppear并计算是否该获取下一页 这是一个人为的示例 因为通常您访问的网络或磁盘比这慢得多 但它会给您一个想法 调getNextPag
  • Valgrind 在 pthread_spin_lock 中挂起,消耗 100% CPU

    我的 C 多线程应用程序在 valgrind 版本 3 8 0 及最新版本的 pthread spin lock 中挂起 但在 3 6 0 3 6 1 和 3 7 0 中并没有发生这种情况 有人知道这个问题有什么解决方法吗 这是导致 val
  • hadoop和spark现在支持IPv6吗?

    我想在纯IPv6环境上构建Hadoop和Spark集群 我已经通过 IPv4 构建了它 如何配置在 IPv6 环境下运行它们 hadoop 和 Spark 现在支持 IPv6 吗 它不是 截至今日HADOOP 11890跟踪 IPv6 支持
  • MongoDB中如何在对象级别进行匹配?

    输入文件 data abc Id 100 xyz Id 123 解释 我想做 match on data i i is parameter 如果我给 abc as a parameter我得到以下输出 我想将多个参数传递给 i abc xy
  • 如何指定求解微分方程的最终值(而不是初始值)

    我想求解 R 中的微分方程 deSolve 我没有初始条件 只有状态变量的最终条件 如何才能做到这一点 典型的代码是 ode times y parameters function where y是初始条件并且function定义微分方程
  • 使用 IEnumerable 和 Linq-To-Sql 时如何防止内存溢出?

    这个问题与我之前的一个问题 这是我当前的代码 IEnumerable
  • 如何解码 HTTP 中 Content-Disposition 标头的文件名参数?

    This question提供了这方面的背景filename范围 我需要编写一个脚本来访问网络服务器上的一些文件 文件名包含无法用 ASCII 编码的 CJK 字符 curl I http bj baidupcs com file f6f2
  • JasperReport 参数在 iReport 中有效,但在 JasperServer 上失败

    我在 iReport 中创建了一份报告 使用 isForPrompting true 设置参数 当我用预览来测试它时 一切正常 Parameter Symbol SQL Query select from table where colum
  • 如何在没有浏览器的情况下与网站交互? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 假设我正在构建一个 C 应用程序 申请目的 从用户处获取用户名和密码 并显示网站上存在的