Volley发送请求而不编码

时间:2016-06-24 12:10:11

标签: java android encoding android-volley content-type

我尝试使用普通字符串向wifi控制器发送HTTP请求。我的字符串是API:W/PSS:12345但是当通过我的Android应用程序发送时,控制器会收到API=W%2FPSS%3A12345。我知道这是由于标头值content-type: application/x-www-form-urlencoded而发生的。

但是,在我的请求中,我已经覆盖了该方法:

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

将内容类型设置为纯文本,但是在发送之前,volley仍会对其进行编码。 (在我的PC上使用REST客户端,将请求发送到控制器而不对其进行编码)

有没有办法将我的字符串作为纯文本发送而不进行凌空编码?控制器是低级别的,所以我不想在两侧添加任何编码,只需发送普通字符串。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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