如何在安全站点中使用webclient?

时间:2020-03-05 18:48:54  来源:igfitidea点击:

我需要自动化一个涉及使用登录表单的网站的过程。我需要在登录页面之后的页面中捕获一些数据。

我知道如何对普通网页进行屏幕抓取,但对于安全网站后面的网页却不行。

  • 我如何继续登录其他页面?

解决方案

回答

我们可以轻松模拟用户输入。我们可以通过将发布\获取请求发送到网站来通过程序在网页上提交表单。
典型的登录表单如下:

<form name="loginForm" method="post" Action="target_page.html">
   <input type="Text" name="Username">
   <input type="Password" name="Password">
</form>

我们可以向网站发送发帖请求,并提供"用户名和密码"字段的值。发送请求后会发生什么情况很大程度上取决于网站,通常会将我们重定向到某个页面。授权信息将存储在session \ cookie中。因此,如果我们抓取客户端可以维护Web会话\了解cookie,则可以访问受保护的页面。

从问题尚不清楚我们将使用哪种语言\框架。例如,有一个用perl WWW :: Mechanize编写的屏幕抓取框架(包括登录功能)。

请注意,如果我们尝试登录的站点使用Java脚本或者某种CAPTCHA,则可能会遇到一些问题。

回答

能否请我们澄清一下?我们所说的WebClient类是HTTPUnit / Java中的类吗?

如果是这样,会话应自动保存。

回答

这是我要执行的步骤:

  • 与WebClient相关的https没什么特别的-它可以正常工作
  • Cookies通常用于进行身份验证-我们需要捕获并重播它们
  • 获取登录表单,捕获响应中的cookie。
  • 使用Xpath和HtmlAgilityPack,找到"输入类型=隐藏"字段名称和值。

回答

从问题尚不清楚,我们指的是哪种WebClient类(或者语言)。

如果有Java Runtime,则可以使用Apache HttpClient类;这是我使用Groovy编写的一个示例,该示例通过SSL访问美味的API:

def client = new HttpClient()

   def credentials = new UsernamePasswordCredentials( "username", "password" )
   def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
   client.getState().setCredentials( authScope, credentials )

   def url = "https://api.del.icio.us/v1/posts/get"

   def method = new PostMethod( url )
   method.addParameter( "tag", tag )
   client.executeMethod( method )

列表数量不匹配

列表数量不匹配