2014-11-11 1 views
0

Java 응용 프로그램을 사용하여 html 형식으로 POST하려고합니다. 즉 다음과 같이 폼을 잡고, (. 예를 들어 http://www.domain.tld/somepage.html)을 중요한 경우 형식은 확장자가 html, 페이지에 :Java 응용 프로그램의 HTTP POST

<Form method="POST"> 
<input type="hidden" name="op" value="checkfiles"> 
<Textarea name="list" rows=12 style="width:100%;font:12px Arial"></Textarea> 
<br><input type="submit" name="process" value="Check"> 
</Form> 

내가 아파치 HTTPComponents로했지만, 지금까지 내 시도가 실패되었습니다. 어떤 이유

private static void submit(String text) throws Exception{ 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://www.domain.tld/somepage.html"); 

    List <NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("list", text)); 

    httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 

    HttpResponse response = httpclient.execute(httppost); 

    BufferedReader rd = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent())); 

    StringBuffer result = new StringBuffer(); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     result.append(line); 
    } 

    System.out.println(result.toString()); 

} 

http://www.domain.tld/에서 나에게 페이지를 반환 : 여기 내가 사용하는 기능입니다. 도와주세요.

답변

1

시작하려면 (그러나 질문과는 무관 함) EntityUtils.toString()을 사용하여 페이지 내용을 수동으로 읽어들이는 String으로 가져옵니다. EntityUtils.consume()을 사용하여 자원 (풀에 대한 연결 등)을 해제하는 것을 잊지 마십시오.

질문에 대해서는 코드가 잘 보입니다. 내 경험에 의하면, 제출하는 페이지가 여러 가지 이유로 인해 기본 페이지로 리디렉션됩니다. 내가 생각할 수있는 어떤

  1. 귀하의 게시물 매개 변수

    있습니다 잘못 - 원격 시스템 위협 요청 (즉 정상)
  2. 당신은 구문 분석해야 할 몇 가지 입력 매개 변수를 누락 등 잘못된 메인 페이지로 리디렉션 페이지에서 (예 : .NET 시스템 용 __VIEWSTATE)
  3. 먼저 페이지를 GET 초기화해야 세션이 초기화됩니다. 세션 쿠키 등을 받으십시오.
  4. 틀린 웹 페이지에 게시 중입니다.
  5. 클라이언트에 일부 헤더가 없습니다. 클라이언트 이름

다른 문제가있을 수 있지만 가장 많이 발생하는 문제입니다. 내 연습에서는 웹 사이트에 대한 페이지 관리자를 구현했습니다. 웹 브라우저에서 게시물이 수행되는 방식을 분석해야합니다. 필자는 파이어 폭스 확장 기능을 갖춘 파이어 폭스를 사용하고 무슨 일이 일어나고 있는지 재확인 할 것을 강력히 권고한다. 당신은 항상 almoust Basicly 등 쿠키를 들고, 페이지를 읽는 세션을 초기화 포함 브라우저의 정확한 동작을 다시 만들어야

편집

양식 3 개 입력을 가지고 있지만, 당신은 단지 list를 제출한다. op 및 (선택 사항) process 입력란을 제출해보세요.

+0

추가 params.add (새 BasicNameValuePair ("op", "checkfiles"))); 이제는 작동합니다. 고맙습니다! – nmpg

0

Apache HttpComponents/HttpClient를 사용하여 웹 양식에 POST 할 수 없습니다. 이 라이브러리가 의도하는 것은 HTTP 프로토콜을 통해 POST 데이터를 보내고 양식에 데이터를 입력하지 않아서 DOM 조작/상호 작용을 의미합니다. 예를 들어, HttpComponents를 사용하여 양식 데이터를 입력 할 수있는 경우 양식 (예 : 양식의 제출 버튼)을 클릭 할 수있는 "클릭"방법이 있습니까?

자동화를 사용하여 양식에 데이터를 입력하려는 경우 DOM과 상호 작용하는 다른 라이브러리를 사용하거나 업계 표준 인 webelements와 상호 작용하는 Selenium Webdriver를 사용해보십시오.도움이 될 수 있습니다

일부 셀레늄 문서 :이 도움이

http://docs.seleniumhq.org/projects/webdriver/ Selenium Webdriver: Entering text into text field

희망! :)

+0

그게 무슨 소리 죠? OP는 브라우저에서 자동화하지 않기 위해'POST'를 실행하려고 시도하고 있습니다 ... 제가 틀 렸습니다? – Antoniossss

+0

나는 그의 첫 문장을 오해했습니다. "자바 애플리케이션을 사용하여 HTML 폼에 POST하려고합니다. 폼은 * 페이지에 * 있습니다.". 나는 그가 동적으로 양식 필드를 채우려 고 생각했지만 분명히 그는 그렇지 않다고 생각했습니다. 수정 해줘서 고마워. – Rubicon