如何在安全站点中使用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 )
列表数量不匹配
列表数量不匹配