5

我有一个问题..我想从网站上下载一些信息到 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>

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

我是用 Java/Scala 做的。

4

2 回答 2

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)

此示例将简单地打印响应,但您可以轻松地提供更复杂的方法来处理响应,并且您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)

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

于 2012-05-28T19:52:59.057 回答
2

您可以使用Apache Http 客户端。这是在 scala 中使用它的教程:

http://metacircular.wordpress.com/2007/02/07/towards-polite-http-retrieval-in-scala/

基本上,你:

  1. 实例化一个 httpClient
  2. 使用用户名和密码参数向 logowanie.php 发出 POST 请求
  3. 使用相同的 httpClient 实例发出 GET 请求以获取您想要的页面
于 2012-05-28T18:41:52.323 回答