我有问题.. 我想从网站上下载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做的。
答案 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/
基本上,你: