Java/Scala | 登录网站

daa*_*atz 5 scala

我有一个问题..我想从网站下载XML一些信息(我知道该怎么做),我知道如何从网站上获取信息,但问题是我首先需要登录.

它的代码部分:

 <form method="post" action="logowanie.php">
  <table class="center">
   <tr>
    <td><label for="username">Login:</label></td>
    <td><input type="text" name="username" value=""></td>
    <td rowspan="2"><div class="submit"><input type="submit" value="OK" name="submit"></div></td>
   </tr>
   <tr>
    <td><label for="password">Has?o:</label></td>
    <td><input type="password" name="password" value=""></td>
Run Code Online (Sandbox Code Playgroud)

我需要一些如何输入用户名密码并按下提交按钮.任何想法,代码示例怎么做?非常感谢.

我在Java/Scala中做它.

Tra*_*own 4

虽然 ApacheHttpClient可以工作,但从 Scala 使用它是不惯用且冗长的,并且Dispatch库提供了一个很好的 Scala 包装器,可让您编写更简洁的代码。你可以这样使用它:

import dispatch._

val u = url("https://site.com/logowanie.php")
val info = Seq("username" -> "me", "password" -> "secret")

val client = new Http
client(u << info >>> System.out)
Run Code Online (Sandbox Code Playgroud)

此示例将简单地打印响应,但您可以轻松提供处理响应的更复杂的方法,并且您client现在保存继续与站点交互所需的 cookie。

这是我用来登录系统的一个更复杂的示例,该系统要求我在登录之前从表单中获取生成的标识符:

import dispatch._
import dispatch.jsoup.JSoupHttp._

val u = url("https://myuni.edu/something/login")
val info = Seq(
  "username"  -> "me",
  "password"  -> "secret",
  "warn"      -> "true",
  "submit"    -> "LOGIN",
  "execution" -> "e1s1",
  "_eventId"  -> "submit"
)

val client = new Http
val id = client(u </> (_.select("input[name=lt]").first.attr("value")))
client(u << info :+ ("lt" -> id) >>> System.out)
Run Code Online (Sandbox Code Playgroud)

在这里,我使用 Dispatch 的JSoup支持来解析表单页面并提取我需要的标识符,然后在提交请求时将其添加到表单参数中。