2015-02-03 5 views
1

Я использую POST HttpURLConnection, чтобы получить ответ. Im способна получить ответный код 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. – 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, я попробовал ваше предложение, и теперь я получаю нулевой ответ –

+0

вы отлаживали, он должен работать? – RE350

+0

Я попытался использовать, InflaterInputStream in = new InflaterInputStream (urlConn.getInputStream(), новый Inflater (true)); он дает null, бросая исключение как :: java.util.zip.ZipException: недопустимый тип блока –

0

я ве была та же проблема тоже, и я удалил все свойства запроса, за исключением Content-Type, и теперь он работает.

Donno how/why it works now.

Смежные вопросы