2012-03-31 5 views
2

그래서이 코드를 가지고 작동 시켰고 기본적으로 http 포스트를 보내고 엘리먼트가 name 속성을 포함하지 않는 한 거의 모든 외부 웹 사이트에 요청을 할 수있게되었습니다.HTTP 요청을 보내서 GET/POST를 사용하여 Java로 양식 하시겠습니까?

이 자바 코드 :

public static String sendPostRequest(String url) { 

    StringBuffer sb = null; 

    try { 

     String data = URLEncoder.encode("user", "UTF-8") + "=" 
       + URLEncoder.encode("myUserName", "UTF-8") + "&" 
       + URLEncoder.encode("submit", "UTF-8") + "=" 
       + URLEncoder.encode("Submit", "UTF-8"); 


     URL requestUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection) requestUrl 
       .openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("GET"); 

     OutputStreamWriter osw = new OutputStreamWriter(
       conn.getOutputStream()); 
     osw.write(data); 
     osw.flush(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 

     String in = ""; 
     sb = new StringBuffer(); 

     while ((in = br.readLine()) != null) { 
      sb.append(in + "\n"); 
     } 

     osw.close(); 
     br.close(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

이 난에 요청을 보내려고 양식은 (는 W3 스쿨 사이트에서 양식이 사이트 http://www.w3schools.com/html/html_forms.asp 인,의) 다음은 예입니다 : 에 이름 속성이하지 않는 버튼을 제출하기 때문에

<form name="input0" target="_blank" action="html_form_action.asp" method="get"> 

Username: 

<input type="text" name="user" size="20" /> 

<input type="submit" value="Submit" /> 

</form> 

는 지금, 나는/적절한 HTTP가 가져 그것에 POST 요청을 (나는 그것이이 경우 get 메소드 알고) 보낼 수 없습니다. String 데이터를 실제로 (이 키/값이 적절한) 것으로 대체하여 실제로이 양식에 요청을 보내려면 어떻게해야합니까? 내가 HTTP 요청

HttpClient를 생성을위한 HttpClient를 사용하고

답변

1

오픈 소스 아파치 프로젝트입니다. 당신은 널리 코드를 얻을 수 있습니다. HttpClient를 버전 4.1 당신은 모든 데이터에 submit 부분을 추가하지 마십시오의 HTTP API를

HttpClient Learning Artical

+0

어떻게 이런 일이 내가 할 노력하고있어 어떤 방법으로 상대에? 특정 사이트에 HTTP 포스트 요청을 보내려면 사용해야하는 키/값을 묻는 중입니다 ...API의 일종에 관한 아니 – ZimZim

+0

@ user1007059 : HttpClient는 당신에게 당신이 문제를 해결할 수있는 더 나은 가독성을 줄 것이다 ... 나는 내 프로젝트 에서이 httpclien 4.1을 사용하고 모든 URL에서 데이터를 가져옵니다. –

1

의 좋은 세트입니다. 이것은 브라우저가 "제출"버튼이 작업을 시작한다는 것을 알기위한 것입니다. 새로 열어 본 사이트의 URL이 다음과 같이 표시되는지 확인하십시오. http://www.w3schools.com/html/html_form_action.asp?user=myUserName - 여기에 submit 부분이 없습니다. 그래서 data 코드는 다음과 같아야합니다

String data = URLEncoder.encode("user", "UTF-8") + "=" 
      + URLEncoder.encode("myUserName", "UTF-8"); // end here 
+0

ehm이 작동하지 않습니다. html_form_action.asp 사이트 또는 html_forms.asp 사이트에서 사용하든 상관 없습니다. 그리고 다른 사이트에서 시도해 보았지만 제출 버튼 부분을 추가하지 않으면 작동하지 않습니다 ... – ZimZim

+0

getOutputStream()을 호출하면'GET' 요청이'POST'에 의해 자동으로 대체되기 때문일 수 있습니다. '. 이것은 보통 저자가 의미했던 것이기 때문에 합당한 일입니다. 실제로'GET' 요청을 내기 위해서는'OutputStreamWriter' 부분 전체를 제거하고 유효한 GET 요청에 있어야하는 것처럼'data'를 URL에 추가하십시오 :'URL requestUrl = new URL (url + "?"+ data); . 물론'submit' 부분은 추가하지 않습니다. –

+0

하지만 그것은 GET 요청이 아니므로 특정 URL의 HTML 소스를 직접 가져 오는 것일뿐입니다. 요청을해야합니다. 출력 스트림을 완전히 제거하여이 작업을 시도했지만 여전히 잘못된 데이터를 반환합니다. – ZimZim

0

// 만들기 HTTP GET 요청

HttpClient httpClientDefault1 = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("http://www.your.targer.url.com/page.html"); 

// 설정 헤더 (서버가 일부 브라우저의 요청에 던져 이해)

httpPost.setHeader("Connection", "keep-alive"); 
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"); 
httpPost.setHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
httpPost.setHeader("Accept-Language", "en-us,en;q=0.5"); 
httpPost.setHeader("Host", "ec2-23-20-44-83.compute-1.amazonaws.com"); 

httpPost .setHeader ("Referer", resultUrl + resultUrlAsp);

// 세트

ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 
nameValuePair.add(new BasicNameValuePair("key","")); 
nameValuePair.add(new BasicNameValuePair("txtenroll","095020693015")); 
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 

가 // 요청을 보내기 매개 변수

HttpResponse httpRespnse = httpClientDefault1.execute(httpPost); 

, 응답 본체도

if(httpRespnse.getStatusLine().getStatusCode() != 200) { 
    InputStream in = httpRespnse.getEntity().getContent(); 
    byte b[] = new byte[1024] ; 
    StringBuilder html = new StringBuilder(""); 
    while(in.read(b) != -1) { 
     html.append((new String(b)).toString()); 
     b = new byte[1024]; 
    } 
    System.out.println(html); 
} 

당신은 헤더, HTTP 매개 변수, 쿠키를 얻을 수 있습니다 관리 // 받기 자바 코드를 통한 세션 ... :) :)

+0

이것은 아파치 라이브러리를 사용합니다. – mateuszb

관련 문제