2011-03-02 4 views
2

웹 응용 프로그램이 웹 응용 프로그램의 특정 동작을 기반으로 tomcat에서 실행되는 웹 응용 프로그램이 있습니다. curl을 트리거하는 Java 코드를 작성해야합니다 (http://curl.haxx.se). 그런 다음 Curl은 타사 응용 프로그램을 쿼리하고 XML/JSON을 반환합니다.httpclient : java

이 내용은 저에게 읽혀 져야하며 사용자에게 적절한 응답을 보내야합니다.

나는 이것이 컬 (curl)로 할 수 있지만 웹 어플리케이션으로부터 요청을하기위한 명령 행 도구를 사용하는 것은 최선의 방법이 아니므로 Java, httpclient API에 코드를 작성했다.

컬 코드는 기본적으로

curl -u username:password -d "param1=aaa& param2=bbb" -k http://www.testme.com/api/searches.xml 

컬 base64 인코딩을 사용했다. 따라서 나에 의해 기록 된 자바의 해당 코드는 내가 "406"로 RCODE의 반환 값을 얻을 사용

import org.apache.commons.codec.binary.Base64; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpStatus; 
import org.apache.commons.httpclient.UsernamePasswordCredentials; 
import org.apache.commons.httpclient.methods.PostMethod; 

import java.io.BufferedReader; 
import java.io.ByteArrayOutputStream; 
import java.io.InputStreamReader; 

public class NCS2 
{ 

    public static void main(String args[]) { 

    String username = "abc"; 
    String password = "xyz"; 

    HttpClient httpclient = new HttpClient(); 
    BufferedReader bufferedreader = null; 


    PostMethod postmethod = new PostMethod("https://www.testabc.com/api/searches.xml"); 
    postmethod.addParameter("_def_id","8"); 
    postmethod.addParameter("dobday", "6"); 
    postmethod.addParameter("dobmonth","6"); 
    postmethod.addParameter("dobyear", "1960"); 
    postmethod.addParameter("firstname", "Test"); 
    postmethod.addParameter("lastname", "Test"); 


    String username_encoded = new String(Base64.encodeBase64(username.getBytes())); 
    System.out.println("username_encoded ="+username_encoded); 

    String password_encoded = new String(Base64.encodeBase64(password.getBytes())); 
    System.out.println("password_encoded ="+password_encoded); 

    httpclient.getState().setAuthenticationPreemptive(true); 
    UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(); 
    credentials.setPassword(username_encoded); 
    credentials.setUserName(password_encoded); 

httpclient.getState().setCredentials("FORM","http://www.testabc.com/api/searches.xml",credentials); // I am not sure which one to use here.. 

    try{ 
      int rCode = httpclient.executeMethod(postmethod); 
      System.out.println("rCode is" +rCode); 

      if(rCode == HttpStatus.SC_NOT_IMPLEMENTED) 
      { 
       System.err.println("The Post postmethod is not implemented by this URI"); 
       postmethod.getResponseBodyAsString(); 
      } 
      else if(rCode == HttpStatus.SC_NOT_ACCEPTABLE) { 
       System.out.println(postmethod.getResponseBodyAsString()); 
      } 
      else { 
         bufferedreader = new BufferedReader(new InputStreamReader(postmethod.getResponseBodyAsStream())); 
         String readLine; 
     while(((readLine = bufferedreader.readLine()) != null)) { 
      System.out.println("return value " +readLine); 
     } 
     } 
    } catch (Exception e) { 
     System.err.println(e); 
    } finally { 
     postmethod.releaseConnection(); 
     if(bufferedreader != null) try { bufferedreader.close(); } catch (Exception fe) fe.printStackTrace(); }  } } 
} 

입니다. "Not Acceptable"응답을받는 이유는 무엇입니까?

답변

0

요청 및 응답을 기록하는 프록시 사용을 고려하십시오. VisualProxy과 같은 것입니다. 나는 내가 필요할 때 쓸 때 쓰지 않았다. 내 것은 방금 페이지의 본문으로 요청을 썼습니다.