您是否可以将子顺序HTTP POST请求发送到服务器

时间:2013-12-02 15:15:42

标签: vb.net http-post web-scraping

我刚刚开始使用HTTP POST请求。这么多,以至于我不知道这是否能解决我的问题,但是要了解这两种方式似乎都是一件有趣的事情。无论如何,我目前使用webbrowser控件执行以下操作:

  1. 导航到页面
  2. 输入用户名和密码
  3. 点击“登录”按钮
  4. 在文本框中输入一些文字
  5. 点击另一个按钮(加载确认页面)
  6. 单击确认按钮
  7. 我的问题是HTTP POST请求是否允许webclient保持登录到网页,是否允许发布到页面,然后在收到更新页面后再次发布(步骤4,5和6)

1 个答案:

答案 0 :(得分:3)

因此,您希望从程序或脚本中删除某些Web内容或操作网站,但是您很难。不,只是切换到POST不会对你有所帮助。通常,问题与身份验证有关。您需要做的是在多个HTTP 请求中保留会话,无论请求是POST,GET,HEAD,DELETE,PUT,UPDATE等等。

如评论中所述,HTTP请求是无状态,其中每个请求都独立于其他请求。但是,Web服务器仍将为各个会话维护一些信息,因此您通常仍需要多个请求。但是,我发现在很多时候,正好有两个请求足以完成网站上的操作。

第一个请求会将您的登录信息发布到该站点。此时,该网站将发出响应。您需要分析此响应,因为其中的某个位置将存在会话密钥。现在,当我告诉你分析响应时,我并不是说你编写代码来执行此操作......这将在以后发生。您需要实际发送一个样本请求记录响应,并亲自阅读它以查找会话密钥。您还需要了解Web服务器如何在将来的请求中找到会话密钥。

在此过程中,重要的是要记住响应不仅包含HTML。事实上,此密钥的最常见位置是 Cookie 。一旦您知道如何获取会话密钥,您需要确保您的下一个请求包含该会话密钥作为请求的一部分。这就是网站如何知道您的身份,您是否有权执行所需的操作以及要返回的信息。

第二个请求实际上会执行所需的操作。这可能是一个简单的GET请求,如果你想要做的就是从网站上检索一些信息。如果您需要告诉网站执行某些操作,它也可能是POST。

要了解您的请求需要的样子,您可以使用特殊类型的http代理。 Fiddler 是一个受欢迎的选择。您将代理安装到您的计算机,然后从常规Web浏览器执行所需的操作。然后Fiddler将告诉您发送了哪些请求和响应。即使您需要查看大量页面以通过Web浏览器完成操作,通常您仍然只需要最终请求才能真正实现目标。您可以使用fiddler提供的信息来查找和复制所需的请求。

在.Net世界中,发送这些请求和评估响应的最佳工具通常是 WebBrowser控件。相反,请查看System.Net.WebClient课程,或查看System.Net.HttpWebRequest / System.Net.HttpWebResponse