2016-06-24 4 views
0

Я пытаюсь отправить HTTP-запрос в контроллер Wi-Fi с обычной строкой. Моя строка API:W/PSS:12345, но при отправке через мое приложение для Android контроллер получает API=W%2FPSS%3A12345. Я знаю, что это происходит из-за значения заголовка content-type: application/x-www-form-urlencoded.Volley отправить запрос без кодировки

Однако в моей просьбе я переопределен метод:

public String getBodyContentType() { 
    return "text/html;"; 
} 

, чтобы установить тип содержимого в виде простого текста, но залп еще кодирует его перед отправкой. (Используя клиент REST на моем ПК, отправляет запрос на контроллер без его кодирования)

Есть ли способ отправить мою строку в виде обычного текста без волейбола? Контроллер имеет низкий уровень, поэтому я не хочу добавлять какие-либо кодировки с обеих сторон, просто отправляйте простые строки.

ответ

0

После рытья через исходный залп код, я нашел виновного в том, что ява URLEncoder.encode() вызывается метод , который будет кодировать строку независимо от того, что ... Я пропустил это с очень взломанным способом. Если какой-либо из вас есть лучший способ сделать это, пожалуйста, дайте мне знать, так как это очень некрасиво:

@Override 
public String getBodyContentType() { 
    //for settings the content=type header, the right way... 
    return return "text/html"; 
} 

@Override 
public byte[] getBody() throws AuthFailureError { 
    Map<String, String> params = getParams(); 
     if (params != null && params.size() > 0) { 
      return encodeParameters(params, getParamsEncoding()); 
     } 
    return null; 
} 

//Hax....... 
private byte[] encodeParameters(Map<String, String> params, String paramsEncoding){ 
    StringBuilder encodedParams = new StringBuilder(); 
     try { 
      for (Map.Entry<String, String> entry : params.entrySet()) { 
       encodedParams.append(entry.getKey()); 
       //encodedParams.append(':'); 
       encodedParams.append(entry. 
       //encodedParams.append('&'); 
      } 
      return encodedParams.toString().getBytes(paramsEncoding); 
     } catch (UnsupportedEncodingException uee) { 
      throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee); 
     } 
} 

Исходный код залпа здесь, вы можете посмотреть на то, как он кодирует элементы: https://android.googlesource.com/platform/frameworks/volley/+/idea133/src/com/android/volley/Request.java

0

Переопределить метод getHeaders, а также и установить тип содержимого в заголовке, как это:

public Map<String, String> getHeaders() throws AuthFailureError { 
    HashMap<String, String> headers = new HashMap<String, String>(); 
    headers.put("Content-Type", "application/text"); 
    return headers; 
} 
+0

Просто попробовал, волейбол все еще кодирует его перед отправкой. Просто уточнить: теперь у меня есть оба заголовка контента. Не просто 'applcation/text'. Нужно ли добавлять кодировку utf-8 или что-то в этом роде? –