2016-06-24 7 views
0

通常の文字列を使用して、HTTPリクエストを無線コントローラに送信しようとしています。私の文字列はAPI:W/PSS:12345ですが、私のAndroidアプリで送信すると、コントローラはAPI=W%2FPSS%3A12345を受信します。私はこれがヘッダ値content-type: application/x-www-form-urlencodedのために起こることを知っています。プレーンテキストにコンテンツタイプを設定するバレーはエンコーディングなしでリクエストを送信します

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

が、ボレーはまだそれを送信する前に、それをコードする

しかし、私の要求に私は、メソッドをオーバーライドしました。 (私のPCでRESTクライアントを使用すると、エンコーディングせずにコントローラに要求を送信します)

私の文字列をボレー符号化なしでプレーンテキストとして送信する方法はありますか?コントローラは低レベルなので、私は両方の側に任意のエンコーディングを追加する必要はありません、単純な文字列を送信します。

答えて

0

ボレーソースコードを掘削した後、私は犯人は、Java 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エンコーディングなどを追加する必要はありますか? –

関連する問題