zoukankan      html  css  js  c++  java
  • java后台开发传输乱码&&接口post传参失败

    起因:

    前几天遇到的问题,才有时间记录,需求:本地生成xml形式的字符串以参数形式用post方法传送到对方的固定接口;

    这个需求写的时候感觉很容易,本地测试的时候,也觉得很简单就过了,然后和对方联调的时候,稀里哗啦调了N久,

    中间对方换了人接手,稀里哗啦又调了N久,对方改代码,稀里哗啦又又调了N久,最后上线了,发现接口对不上,,,

    经过:

    问题最开始只是乱码问题,无非就是UTF-8和GBK之间的转换,我们这边统一的UTF-8的编码,对方是GBK。对面改为

    了UTF-8,联调以正确结束;然后对面换人改代码,说要GBK的,我们发了UTF-8的,他们能解析,然后说头部编码格式

    要改为GBK,好奇他们居然可以解析的情况下,应要求做出了一个挺low的决定,替换字符串,将UTF-8换为GBK。【其实

    这的时候就有点歪了,以至于后面调的比较吃力,当时应该和对方反复确认一下的】。说是没问题,那就上线了,,,,

    然后13call,说乱码又出现了,,,

    前辈们得知有问题后,第一时间支援,开始分析,才发现,最开始的测试是错的,我用eclipse启动tomcat服务器,这时候用

    的是eclipse的编码模式,应该生成war包放在tomcat下启动才能模拟真实的环境,然后我们在不修改环境的情况下各种尝试

    编码转换,然后对方说收到了不是乱码的数据,天真的我以为就可以收尾了

    对方马上提出,收不到参数的那个字段,这里面用的HttpClient的post方法发送,如下↓

    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost("URL");
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(参数);
    UrlEncodedFormEntity uefEntity;
    uefEntity = new UrlEncodedFormEntity(formparams, "GBK");
    post.setEntity(uefEntity);
    HttpResponse response2 = client.execute(post);

    debug的时候post之前,参数都是有值的,一到post就为null了,浓浓的诡异感飘然而起,前辈当机立断,换方法

    我们换用了HttpURLConnection方法,如下↓

    URL postUrl = new URL(URL);
    HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestMethod("POST");
    connection.setUseCaches(false);
    connection.setInstanceFollowRedirects(true);
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.connect();
    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    String content = "参数=" + URLEncoder.encode(参数, "GBK");
    out.writeBytes(content);

    收尾了。。。。。

    总结:

    前辈说,HttpURLConnection是基本的方法,HttpClient是基于HttpURLConnection的封装,基于“简单的问题用

    复杂的方法,复杂的的问题用简单的方法”原理,我们回归原始,,,,

    为前辈的机智点赞,记住--生成war包放在tomcat下启动来模拟真实的环境,好奇为什么定接口的时候不用json,以后

    我商讨的方案,力争用json,后期好保养,

  • 相关阅读:
    设计模式学习
    rabbitMQ topic实现广播
    rabbitMQ direct实现广播
    rabbitMQ fanout 实现广播
    rabbitMQ 生产者消费者
    python select 实现IO异步
    python gevent 爬虫
    python gevent socket
    python 协程
    python 进程池
  • 原文地址:https://www.cnblogs.com/chanmao--/p/5872733.html
Copyright © 2011-2022 走看看