首页 > 编程知识 正文

网页accept,curl发送post中文乱码

时间:2023-05-05 08:00:15 阅读:137260 作者:3174

今天,发送HTTP Post请求时,响应消息有时正常,有时乱码,也不是中文乱码。 应答消息是整个乱码,最初以为是由InputStreamReader读取时的字符编码引起的,所以使用utf-8:inputstreamreaderisr=newinputstreamreader,但是还是乱码但是,请求报头也是utf-8,不是因为这个问题。 抓住数据包后,发现应答报文体乱码的请求头比未乱码的消息请求头有多个属性: Accept-Encoding=gzip,这个问题以前遇到过,但是突然忘记了。 如果请求头带Accept-Encoding=gzip,则会压缩响应消息,因此有两种解决方案。 第一个(简单粗暴),要求从头部移除Accept-Encoding的gzip就可以了

第二个(解码) )判断应答报头中是否有“Content-Encoding”属性,如果有,则判断是否有“gzip”,如果有,则解压,否则正常阅读即可/***发送请求@param requestMethod请求方法* @param outputJsonStr请求参数* @param proxy可以代理*@return*@throoxy或使用公共静态映射、 objecthttprequestjson (stringrequesturl,String requestMethod,String outputJsonStr,Proxy proxy ) thod,string outjsonstr HttpsURLConnection conn=null; InputStream is=null; 输出流操作系统=null; try{URLURL=newURL(requestURL; if (空!=proxy (//SSL util.ignore SSL ),忽略证书; //连接conn=(httpsurlconnection )打开URL.openconnection(proxy ); }else{conn=(httpsurlconnection ) url.openConnection ); } conn.setrequestmethod (request method ); //设置请求报头信息http head util.setspdreqhead (conn ); //向服务器端写入内容,即发起http请求时应该带的参数IF(null!=outputjsonstr (OS=conn.get output stream ); OS.write (outputjsonstr.getbytes ) ); } os.flush (; //读取服务器端返回的内容MapString,并输入liststringhead=conn.get header fields (; is=conn.getInputStream (; liststringcontentencoding=(liststring ) head.get ) )内容编码; 有无内容编码属性和属性值必须包含gizp if (null! )=content encoding (content encoding (content encoding.contains ) ((gzip ) )/system } else { inputstreamreaderisr=newinputstreamreader (is,' utf-8 ' ); bufferedreaderbr=newbufferedreader (ISR; 字符串行=空; while((line=br.readline ) )!=null(system.out.println ) (line: ) line ); buffer.append(line; } system.out.println (' body : ' buffer.tostring ) ); resmap.put('head ',head ); resmap.put('body ',buffer.toString ) ); }catch(exceptione ) { throw e; (finally ) if )空!=is () { is.close ); (if )空值!=os () { os.close ); } } return resMap; } /** * GZIP解压缩解决内容编码: gzip问题* @param is输入字节流* @return * @throws IOException */publicstaticstringbufferzipinputstream (inputstream is ) throwsioexception (gzipinputstreamgzip=newgzipinputstream ) is ); bufferedreaderin=newbufferedreader (newinputstreamreader ) gzip,' UTF-8 ' ); 字符串缓冲器缓冲器=new string buffer (; 字符串行; while((line=in.readline ) )!=null(buffer.append(line'n ' ); 返回缓冲器; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。