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后缀的启动日志,可以将它下载下来再看. 先尝试修改配置文 ...
随机推荐
- Dubbo-go v3.0 正式发布 ——打造国内一流开源 Go 服务框架
简介:Dubbo-go 是常新的,每年都在不断进化.介绍 Dubbo-go 3.0 工作之前,先回顾其过往 6 年的发展历程,以明晰未来的方向. 作者 | 李志信 来源 | 阿里技术公众号 作者 ...
- 一文了解EPaxos核心协议流程
简介: EPaxos(Egalitarian Paxos)作为工业界备受瞩目的下一代分布式一致性算法,具有广阔的应用前景.但纵观业内,至今仍未出现一个EPaxos的工程实现,甚至都没看到一篇能把EPa ...
- [DApp] Moralis 生产阶段的服务安全设置 -锁定数据库
Moralis 的基础设施数据库是使用的 MongoDB,其非常适合Dev阶段的快速开发. 如果进入生产环境,需要锁定数据库,防止任何用户可利用SDK向Mongo插入多余数据. 另外,Moralis ...
- [MySQL] 原生全文检索 fulltext 的简单应用
在目标字段上添加全文检索:alter table 表名 add fulltext(字段) with parser ngram 查询语句:select * from xxx where match(字段 ...
- (数据科学学习手札160)使用miniforge代替miniconda
本文已收录至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,conda作为Python数据科学领域 ...
- 阿里巴巴MySQL开源中间件Canal入门
前言 距离上一篇文章发布又过去了两周,这次先填掉上一篇秒杀系统文章结尾处开的坑,介绍一下数据库中间件Canal的使用. Canal用途很广,并且上手非常简单,小伙伴们在平时完成公司的需求时,很有可能会 ...
- 数仓OLAP技术
数据应用,是真正体现数仓价值的部分,包括且又不局限于 数据可视化.BI.OLAP.即席查询,实时大屏,用户画像,推荐系统,数据分析,数据挖掘,人脸识别,风控反欺诈,ABtest等等 OLAP(On-L ...
- 如何在低代码平台中引用 JavaScript ?
引言 在当今快速发展的数字化时代,企业对业务应用的需求日益复杂且多元.低代码开发平台作为一个创新的解决方案,以直观易用的设计理念,打破了传统的编程壁垒,让非技术人员也能轻松构建功能完备的Web应用程序 ...
- code::blocks更改编译器配置
- Javascript返回顶部和砸金蛋,跑马灯等游戏代码实现
1. 我们经常写页面的时候会遇到页面很长需要做返回顶部的操作:$("id /class").animate({scrollTop:$('.class').offset().top} ...