Illegal character ((CTRL-CHAR, code 31))问题排查 gzip接口返回 RestTemplate GET POST请求
Illegal character ((CTRL-CHAR, code 31))问题排查 gzip接口返回
#接口返回gzip方式
private static final String ENCODING_UTF8 = "UTF-8";
private static ObjectMapper mapper = new ObjectMapper(); private void writeResponse(HttpServletResponse response, Object outJB){
response.setHeader("Access-Control-Allow-Origin","*");
response.setContentType("text/html; charset=utf-8");
//response.setContentType("application/json; charset=utf-8");
//response.setContentType("text/json; charset=utf-8");
response.setCharacterEncoding(ENCODING_UTF8);
response.setHeader("Content-Encoding", "gzip");
GZIPOutputStream out = null;
//byte[] jsonOut = null;
String jsonOut = null;
try {
// mapper.setSerializationInclusion(Include.ALWAYS);
jsonOut = mapper.writeValueAsString(outJB);
out = new GZIPOutputStream(response.getOutputStream());
out.write(jsonOut.getBytes(ENCODING_UTF8));
out.flush();
} catch (Exception e) {
logger.error("",e);
} finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
1.非gzip接口请求方式
//RestTemplate POST/PUT请求
//requestVO请求参数
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json;charset=UTF-8");
// requestHeaders.add("User-Agent", "mysite_web");
requestHeaders.add("connection", "Keep-Alive");
// requestHeaders.add("Accept", "application/json;version=3.0;compress=false"); RestTemplate template = new RestTemplate();
HttpEntity<String> requestEntity = new HttpEntity<>(GsonUtils.toJson(requestVO), requestHeaders);
logger.info("url=" + serverURL + "/console/test/testRemark/add" );
ResponseEntity<ResponseData> response = template.exchange(serverURL + "/console/test/testRemark/add",
HttpMethod.POST, requestEntity, ResponseData.class); ResponseData httpResult = response.getBody();
logger.info("httpResult=" + GsonUtils.toJson(httpResult)); //RestTemplate GET请求
//请求参数跟在url后面
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/json;charset=UTF-8");
// requestHeaders.add("User-Agent", "mysite_web");
requestHeaders.add("connection", "Keep-Alive");
// requestHeaders.add("Accept", "application/json;version=3.0;compress=false"); RestTemplate template = new RestTemplate();
HttpEntity<String> requestEntity = new HttpEntity<>(null, requestHeaders);
logger.info("url=" + serverURL + "/console/test/testRemark/add?参数1=aa&参数2=bb" );
ResponseEntity<ResponseData> response = template.exchange(serverURL + "/console/test/testRemark/add?参数1=aa&参数2=bb",
HttpMethod.GET, requestEntity, ResponseData.class); ResponseData httpResult = response.getBody();
logger.info("httpResult=" + GsonUtils.toJson(httpResult));
2.gzip接口请求方式
import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; /**
* 请求接口返回gzip的http工具类
*/
public class HttpUtil { public class HttpResult { private String resCode;
private String resMsg;
private Object data; public String getResCode() {
return resCode;
} public void setResCode(String resCode) {
this.resCode = resCode;
} public String getResMsg() {
return resMsg;
} public void setResMsg(String resMsg) {
this.resMsg = resMsg;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
}
} private static final String POST = "POST";
private static final String GET = "GET";
private static final String DELETE = "DELETE";
private static final String PUT = "PUT"; private static final String ENCODEING = "UTF-8"; public static HttpResult get(String reqUrl) throws Exception{
String result = send(reqUrl, "", GET);
System.out.println("reqUrl="+reqUrl+";result="+result); ObjectMapper om = new ObjectMapper();
return om.readValue(result, HttpResult.class);
} public static HttpResult post(String reqUrl, String reqContent) throws Exception{
String result = send(reqUrl, reqContent, POST);
System.out.println("reqUrl="+reqUrl+";result="+result); ObjectMapper om = new ObjectMapper();
return om.readValue(result, HttpResult.class);
} private static String send(String reqUrl, String reqContent, String method) throws Exception {
String resContent = null; HttpURLConnection conn = null;
GZIPOutputStream out = null;
GZIPInputStream in = null;
BufferedReader reader = null;
try {
URL url = new URL(reqUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(100000);
conn.setReadTimeout(100000); conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(false);//是否自动处理重定向
conn.setRequestMethod(method);
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");//传递参数使用 &链接的表单提交方式
conn.setRequestProperty("User-Agent", "mysite_web"); conn.connect();
//java.util.zip.ZipException: Not in GZIP format
if (!method.equals(GET)) {
out = new GZIPOutputStream(conn.getOutputStream());
//发送请求数据
out.write(reqContent.getBytes(ENCODEING));
out.flush();
out.close();
} //接收返回数据
int resCode = conn.getResponseCode();
if(resCode == 200){
in = new GZIPInputStream(conn.getInputStream());
reader = new BufferedReader(new InputStreamReader(in, ENCODEING));
resContent = reader.readLine();
}else{
System.out.println("服务器返回码:"+resCode);
}
} catch (Exception e) {
throw e;
} finally{
if(reader != null){
reader.close();
}
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(conn != null){
conn.disconnect();
}
}
return resContent;
}
}
Illegal character ((CTRL-CHAR, code 31))问题排查 gzip接口返回 RestTemplate GET POST请求的更多相关文章
- java.net.MalformedURLException: Illegal character in URL
在进行接口测试时,意外发现返回结果报java.net.MalformedURLException: Illegal character in URL,意思是“在URL中的非法字符”,我的参数是经过ba ...
- PHP出现iconv(): Detected an illegal character in input string
PHP传给JS字符串用ecsape转换加到url里,又用PHP接收,再用网上找的unscape函数转换一下,这样得到的字符串是UTF-8的,但我需要的是GB2312,于是用iconv转换 开始是这样用 ...
- java.lang.IllegalArgumentException: Illegal character in query at index 261
在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...
- 编译工程时报illegal character:\65279--转
windows对UTF-8文件进行了特殊处理,对UTF-8的文本文件自动在前面加了三个byte(EF BB BF),javac编译时,读到最前面这三个byte时报错 illegal character ...
- URL中增加BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)
序 昨天在做一个 Demo 的时候,因为是调用第三方的接口,採用的是 HTTP 的通信协议,依照文档上的说明,须要把參数进行加密后增加到 URL 中.可是,就是这个看似普普通通的操作,却让我着实费了非 ...
- 爬取数据时解析url时一直报错Caused by: java.net.URISyntaxException: Illegal character in query at index 823替换了所有空格和特殊字符还是无效
近日在用HttpClient访问抓取汇率时,为了省力,直接采用 String url = "http://api.liqwei.com/currency/?exchange=usd|cny& ...
- php iconv() : Detected an illegal character in input string
php iconv() : Detected an illegal character in input string_php技巧_脚本之家 https://www.jb51.net/article/ ...
- 转-java编译时error: illegal character '\ufeff' 的解决办法-https://blog.csdn.net/t518vs20s/article/details/80833061
原文链接:https://blog.csdn.net/shixing_11/article/details/6976900 最近开发人员通过SVN提交了xxx.java文件,因发布时该包有问题需要回退 ...
- curl 错误 [globbing] illegal character in range specification at pos
现象 在使用curl 进行ipv6请求的时候 curl -v "http://[1:1::1]/test.html" 发生了一个错误,报错是 [globbing] illegal ...
- 腾讯云 activeMQ Illegal character in hostname at index 7
查找问题步骤: 1. /usr/local/apache-activemq-5.9.1/data/activemq.log 看一下这个.log后缀的启动日志,可以将它下载下来再看. 先尝试修改配置文 ...
随机推荐
- 「现代C++设计魅力」虚函数继承-thunk技术初探
简介:工作中使用LLDB调试器调试这一段C++多继承程序的时候,发现通过lldb print(expression命令的别名) 命令获取的指针地址和实际理解的C++的内存模型的地址不一样.那么到底是什 ...
- 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
简介: 台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:"第一个十年我才华横溢,'贼光闪现',令周边黯然失色:第二个十年,我终于'宝光现形',不再去抢风头,反而与身边的 ...
- Kubernetes 稳定性保障手册:洞察+预案
简介: 稳定性保障是个复杂的话题,需要有效.可迭代.可持续保障集群的稳定性,系统性的方法或许可以解决该问题. 作者 | 悟鹏来源 | 阿里巴巴云原生公众号 <Kubernetes 稳定性保障手册 ...
- [Go] golang 时间格式化 12小时制 与 24小时制
timestamp := int64(1591271169) # 12小时制 time.Unix(timestamp, 0).Format("2006-01-02 03:04:05" ...
- C语言程序设计-笔记9-函数与程序结构
C语言程序设计-笔记9-函数与程序结构 例10-1 有序表的增删查操作.首先输入一个无重复元素的.从小到大排列的有序表,并在屏幕上显示以下菜单(编号和选项),用户可以反复对该有序表进行插入.删除 ...
- linux终端显示git分支的配置
1.查看现有配置 $ echo $PS1 2.显示git分支 打开./.bashrc文件 添加以下几行命令: git_branch() { git branch 2> /dev/null | s ...
- gitignore文件不生效的问题解决
如何添加 git的忽略文件 .gitignore 在使用git过程中,我们可能有些文件不需要上传上去,比如一些缓存文件,生成的图片,运行环境的一些配置等等,这时就需要用到.gitignore忽略掉这些 ...
- linux开发vue项目,不能热更新?
只需要运行下面的命令即可: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo ...
- .NET周刊【5月第1期 2024-05-05】
国内文章 一个开源轻量级的C#代码格式化工具(支持VS和VS Code) https://www.cnblogs.com/Can-daydayup/p/18164905 CSharpier是一个开源. ...
- IDEA 2020 Maven编译问题:Error:(3, 32) java: 程序包org.springframework.boot不存在。
今天在编译Maven项目时,包已经加载好了,也进行了打包,途中均没有报错.package -- Install -- test 都没用问题,但是,一致性run,就会一直报错,如图 检查打包位置,包也在 ...