Java / Scala |登录网站

时间:2012-05-28 18:02:33

标签: 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>

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

我是用Java / Scala做的。

2 个答案:

答案 0 :(得分:4)

虽然Apache HttpClient可以正常工作,但是从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支持来解析表单页面并提取我需要的标识符,然后在提交请求时我可以将其添加到表单参数中。

答案 1 :(得分:2)

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

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

基本上,你:

  1. 实例化httpClient
  2. 使用用户名和密码params
  3. 向logowanie.php发出POST请求
  4. 使用相同的httpClient实例发送GET请求以获取所需的页面
相关问题