2015-02-03 2 views
1

응답을 얻기 위해 HttpURLConnection POST를 사용하고 있습니다. Im는 responseecode 200을 얻을 수 있지만 responseString은 다음과 같이 인코딩됩니다 :: RP b % + c // 17 Wr u v QJr-N9 여기 ajax에서 응답 HttpURLConnection POST 인코딩 됨

내가 사용하고 있습니다 :

public static String getPOSTAJAX(String getURL,String impersonationID,String getPOSTParameters) 
{ 

    // get Impersonation ID 
    String getimpersonationID = "bearer "+impersonationID; 
    String getResponseline = ""; 
    String getPOSTResponse = null; 
    String postCookies = "sid="+impersonationID; 

    try 
    { 
     //Open HttpURLConnection 
     URL url = new URL(getURL); 
     HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); 
     //add request header 
     if (impersonationID != null && impersonationID != " ") { 
      urlConn.setRequestProperty("Authorization", getimpersonationID); 
      urlConn.setRequestProperty("Accept-Encoding","gzip, deflate"); 
      urlConn.setRequestProperty("Cookie", postCookies); 
     } 
     urlConn.setRequestProperty("Accept","application/json,text/plain,*/*"); 
     urlConn.setRequestProperty("Accept-Language", "en-US,en;q=0.8"); 
     urlConn.setRequestProperty("Connection", "keep-alive"); 
     urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
     urlConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36"); 
     urlConn.setRequestMethod("POST"); 
     urlConn.setRequestProperty("Content-Length", String.valueOf(getPOSTParameters.getBytes().length)); 
     urlConn.setRequestProperty("X-Requested-With", "XMLHttpRequest"); 

     //send the POSt Request 
     urlConn.setDoOutput(true); 
     urlConn.setDoInput(true); 
     DataOutputStream writeRequest = new DataOutputStream(urlConn.getOutputStream()); 
     writeRequest.writeBytes(getPOSTParameters); 
     writeRequest.flush(); 
     writeRequest.close(); 

     //To get the Response Codes 
     int responseCode = urlConn.getResponseCode(); 
     logger.debug("\nSending 'POST' request to URL::" +url); 
     logger.debug("Post parameters ::"+getPOSTParameters); 
     logger.debug("Response Code ::" + responseCode); 

     //parse the response 
     StringBuilder builder = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), Charset.forName("UTF-8"))); 
     while((getResponseline = reader.readLine()) != null) 
     { 
      builder.append(getResponseline); 
      builder.append("\n"); 
     } 
     reader.close(); 
     getPOSTResponse = builder.toString(); 
     //logger.debug("\n "+getPOSTResponse); 

     //Disconnect the connection 
     urlConn.disconnect(); 

    } 
    catch (IOException ioe) { 
     logger.error("\n"+ioe); 
    } 
    return getPOSTResponse; 
} 

사람이 응답을 디코딩하는 방법을 제안 할 수있는 코드는?

+0

기본적으로 ut-8 대신 응답 내용 형식 헤더에서 charset을 가져옵니다. – Musa

+0

무사, 응답 내용 형식 헤더에서 문자 세트를 가져 오는 방법에 대한 몇 가지 예를 말씀해 주시겠습니까? 감사합니다. –

답변

0

InputStreamReader 대신에 데이터를 압축 해제하는 데 사용할 수있는 InflaterInputStream 클래스를 사용하는 것이 좋습니다.

StringBuilder builder = new StringBuilder(); 
InflaterInputStream in = new InflaterInputStream(urlConn.getInputStream()), new Inflater(true)); 

int i; 
while((i=in.read())!=-1){ 
    builder.append(i);  
} 

getPOSTResponse = builder.toString(); 
+0

안녕 RE350, 난 당신의 제안을 시도 지금은 null 응답을 받고 –

+0

당신이 디버깅 했나, 그것은 작동해야합니까? – RE350

+0

나는 InflaterInputStream = new InflaterInputStream (urlConn.getInputStream(), 새로운 Inflater (true))를 사용하여 시도했다. 예외를 던져서 null을 준다 :: java.util.zip.ZipException : invalid block type –

0

나도 같은 문제를 했어 '나는 Content-Type 제외한 모든 요청 속성을 제거하고 지금은 노력하고 있습니다.

Donno how/왜 지금 작동합니까?