웹 응용 프로그램이 웹 응용 프로그램의 특정 동작을 기반으로 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"응답을받는 이유는 무엇입니까?