繁体   English   中英

截击发送请求而不对其进行编码

[英]Volley send request without encoding it

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

但是,在我的请求中,我重写了该方法:

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

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

有没有一种方法可以将我的字符串作为纯文本发送而无需进行齐射编码? 控制器是低级别的,所以我不想在两侧都添加任何编码,只需发送纯字符串即可。

同样重写getHeaders方法,并在标头中设置您的内容类型,如下所示:

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

在仔细研究了凌空源代码之后,我发现罪魁祸首是调用了Java URLEncoder.encode()方法,该方法无论如何都会对字符串进行编码...我以一种非常hack-y的方式跳过了这个过程。 如果您有更好的方法来进行此操作,请告诉我,因为这很丑陋:

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM