2012-05-28 4 views
5

나는 문제가있다. 나는 웹 사이트에서 정보를 다운로드하고 싶다. (나는이 방법을 알고있다.) 나는 웹 사이트에서 정보를 얻는 방법을 알고 있지만 문제는 처음이다. 나는 로그인해야한다. . 코드의Java/Scala | 웹 사이트에 로그인

그것의 부분 : 나는 사용자 이름 암호와 버튼을 누르면 제출 입력하는 방법을 몇 가지 필요

<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> 

. 아이디어, 코드 샘플 어떻게 할 수 있습니까? 대단히 감사합니다.

자바/스칼라에서하고 있습니다.

+1

해당 사이트에서 인증 메커니즘은 무엇입니까? 쿠키, 다이제스트 또는 다른 것? – Rogach

답변

4

아파치 HttpClient이 작동하는 동안, 스칼라에서 그것을 사용하는 것은 일견적이고 장황하다. 그리고 Dispatch 라이브러리는 훨씬 더 간결한 코드를 작성할 수있게 해주는 멋진 스칼라 래퍼를 제공한다. 이처럼 사용할 수 있습니다

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 이제 쿠키는 사용자가 사이트와 상호 작용을 계속할 필요가 보유 . 내가 파견의 JSoup을 사용하고

다음
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) 

: 여기

내가 로그인하기 전에 양식에서 생성 된 식별자를 데리러 저를 필요로하는 시스템에 로그인하는 데 사용했습니다 더 복잡한 예제 양식 페이지를 구문 분석하고 필요한 식별자를 추출하여 요청을 제출할 때 양식 매개 변수에 추가 할 수 있습니다.

+0

아이디어를 Eclipse와 통합하는 방법은 무엇입니까? 멋지게 보입니다. 명령 행에서 실행 해 보았지만 이클립스에서하는 방법은 궁금합니다. 감사! – daaatz

+0

프로젝트를 만드는 방법 등에 따라 다릅니다. 자세한 내용은 예를 들어 [이 답변] (http://stackoverflow.com/a/6201089/334519)을 참조하십시오. –

+0

메신저 노력 내가이 얻을이 코드를 사용하는 경우 : 설명 \t 자원 \t 경로 \t 위치 \t 유형을 값은 dispatch.Request \t main.scala \t/기본 - fa01fe/SRC/메인/스칼라 \t 라인 (24)의 구성원이 아닌 \t 스칼라 문제 – daaatz

2

Apache Http Client을 사용할 수 있습니다. 다음은 스칼라에서 그것을 사용하는 방법에 대한 튜토리얼입니다 :

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

을 기본적으로, 당신은 :

  1. 인스턴스화 세션 객체
  2. 만들기 PARAMS 사용자 이름과 암호를 사용하여 logowanie.php하는 POST 요청을 동일한 httpClient 인스턴스를 사용하여 원하는 페이지를 가져 오는 GET 요청
관련 문제