HttpsURLConnection 返回 400

大家好,我是烤鸭:
    记一次 由 HttpsURLConnection 引起的返回值400的错误。

1.   场景复现


     今天线上调用第三方接口的时候突然报错了。
     严格来说也不是报错,就是发的请求不通了,http报400的错误。
     问了下对接方,也没有改代码,我们这边也没什么大的改动。
     奇了怪了。。。
     这是请求原来的代码

HttpsURLConnection conn = (HttpsURLConnection) reqURL.openConnection();
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("User-Agent", "stargate");
conn.setRequestProperty("Content-Type", "application/json");
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
osw.write(reqStr);
osw.flush();
osw.close();

这是改动的地方,加了句log。

OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
log.info("【返回值】"+conn.getResponseCode());
osw.write(reqStr);
osw.flush();
osw.close();

2.    寻找问题


    把改动的地方逐步还原,最后发现是log的问题。
    log是没有问题,问题在于 conn.getResponseCode()
    conn.getOutputStream() 获取连接的输出流,准备向对方发送(写入)数据的时候,
    调用conn.getResponseCode() 报错。为什么呢。一步步看。

getInputStream方法中调用的是getInputStream0()。

public synchronized InputStream getInputStream() throws IOException {this.connecting = true;SocketPermission var1 = this.URLtoSocketPermission(this.url);if (var1 != null) {try {return (InputStream)AccessController.doPrivilegedWithCombiner(new PrivilegedExceptionAction<InputStream>() {public InputStream run() throws IOException {return HttpURLConnection.this.getInputStream0();}}, (AccessControlContext)null, var1);} catch (PrivilegedActionException var3) {throw (IOException)var3.getException();}} else {return this.getInputStream0();}}

   getInputStream0方法中 

    
    if setDoInput(true)
    if else 抛出rememberedException异常
    if else 输入流不为空
    else 输出的方式是否是流的形式
    往对应的服务器写一段文字,主要调用的是这个方法

    writeRequests,看是否正常响应,响应后关闭流。
    看到这大概就明白了。

3.    总结


    调用 conn.getOutputStream() 获取连接的输出流,等待内容写入。(连接是阻塞的,BIO)
    此时调用 conn.getResponseCode() 会向服务器写入其他的东西(一个8192byte的字符串),
    写入完成后,flush 再close。这时对接方的服务器发现获取到的东西并不是指定格式传输的内容,
    就报400了。

    关于400的说明—— HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里

    https://www.cnblogs.com/beppezhang/p/5824986.html
    不能忽略每一次小的改动。一句小小的log都可能导致问题,还有就是要多测试。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 你有了解css计数器(序列数字字符自动递增)吗?如何通过css的content属性实现呢?

[css] 你有了解css计数器&#xff08;序列数字字符自动递增&#xff09;吗&#xff1f;如何通过css的content属性实现呢&#xff1f; counter-reset:设置计数器 counter-reset: count 0 /* 计数器从1开始 */ counter-increment: 递增数值 counter-increment: count 2 /* 用于c…

npm、webpack、vue-cli 快速上手版

Node.js npm 什么是Node.js 以及npm 简单的来说 Node.js 就是运行在服务端的JavaScript&#xff0c;基于Chrome V8 引擎的。 npm 是Node.js 的包管理工具。 npm的安装和更新 Node.js下载安装 Node.js 官网下载安装。npm自带的包管理工具。 查看安装版本信息&#xff1a; -…

idea修改maven helper右键run maven的位置

idea修改 maven helper右键run maven的位置 现在调整到最上面后&#xff0c;进行maven的命令操作就非常的方便了&#xff01;

springboot webservice cxf 客户端调用

大家好&#xff0c;我是烤鸭&#xff1a; 这篇文章分享的是xcf webservice接口调用。如果接口提供方要求是webservice调用的话&#xff0c;可以参考这篇内容。 1. pom文件 <dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-front…

[css] 说说你对css的will-change属性的理解,它有什么作用呢?

[css] 说说你对css的will-change属性的理解&#xff0c;它有什么作用呢&#xff1f; 告诉浏览器,这个元素的某些属性可能会频繁变动触发回流&#xff0c;要求浏览器给予资源进行优化&#xff0c;一般浏览器会给这个元素单独生成一个图层渲染,gpu加速等提前优化手段 不应过度使…

MFC版链表实现稀疏多项式相加减

链表实现多项式运算&#xff08;加减&#xff09;MFC可视化版题目 设计一个一元稀疏多项式简单计算器。 基本要求 &#xff08;1&#xff09;输入并建立两个多项式&#xff1b; &#xff08;2&#xff09;多项式a与b相加&#xff0c;建立和多项式c&#xff1b; &#xff08;3&a…

WindTerm导出会话

WindTerm的session配置并无法被适用于其他软件中&#xff0c;所有的session保存在WindTerm安装路径下的profiles文件夹内&#xff0c;如果需要更新版本或回退&#xff0c;将所安装的版本覆盖即可&#xff0c;或是将profiles复制于新路径下。 图标闪烁设置、会话保存-导入导出 …

[官方] mysql 性能优化文档(中英文自译)

大家好&#xff0c;我是烤鸭&#xff1a; 根据官方文档翻译并精简部分内容。建议有时间的朋友下载原版查看&#xff0c;全文106页pdf&#xff0c;快的话1-2天就能看完。自己翻译的有些地方可能不完整&#xff0c;欢迎指正。官方pdf下载&#xff0c;需登录&#xff1a;https://w…

使用wiki.js部署团队知识库

1.安装NODE.JS 参考教程 https://xie.infoq.cn/article/6820ea5b625f4e163ccb76cec 1.1 下载nodejs安装包 http://nodejs.cn/download/ 1.2 上传到服务器soft目录后进行解压 # 解压 tar -xf node-v16.18.0-linux-x64.tar.xz # 删除安装包 rm -rf node-v16.18.0-linux-x64.ta…

[css] transition、animation、transform三者有什么区别?

[css] transition、animation、transform三者有什么区别&#xff1f; transition:比较简单的过度动画animation: 使用keyframe自定义动画,比较详细的动画过程transform: 2D或者3D的变形属性个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c…

mysql性能调优精简版

大家好&#xff0c;我是烤鸭&#xff1a; 这是根据官方文档提炼出的mysql性能优化总结。 想看完整翻译版的请看 https://blog.csdn.net/Angry_Mills/article/details/87720396 1. 成本优化 成本包含&#xff1a; IO 和 CPU 从硬盘读取的花费 模型包含&#xff1a; 全表…

Java面试总结

1. HashMap与HashTable的区别 Hashmap的key、value都可以为空&#xff0c;但key只能有一个为空&#xff0c;value可以有多个&#xff0c;非同步 HashTable的key、value都不能为空&#xff0c;是同步的&#xff0c;线程安全 因为hashtable,concurrenthashmap它们是用于多线程的&…

[css] 如何使用css3实现一个div设置多张背景图片?

[css] 如何使用css3实现一个div设置多张背景图片&#xff1f; background-image:url("1.jpg"),url("2.jpg"),url("3.jpg"); background-repeat: no-repeat, no-repeat, no-repeat; background-position: 0 0, 200px 0, 400px 201px;个人简介 我…

系统架构设计师-软件水平考试(高级)-理论-操作系统

系统架构设计师-操作系统 前言&#xff1a; 之前文章发布后&#xff0c;发现还是有一定阅读量的&#xff0c;所以决定继续发一些思维导图。 思维导图首先以思维结构为主&#xff0c;其次以考试的内容进行一定的改动&#xff08;如本次&#xff0c;将“嵌入系统”放在了“操作系…

Error: Cannot find module 'json-schema-faker' YAPI部署

大家好&#xff0c;我是烤鸭&#xff1a; 采坑实录。 安装 YAPI 接口项目时出现的这个问题&#xff0c;如果你不是这个情况出现的这个报错&#xff0c;就不用继续看了。 YAPI的 github 地址: https://github.com/YMFE/yapi 1.场景 安装 YAPI 接口项目。当时日志没找&#xff0c…

[css] 你有用过IE css的expression表达式吗?说说你对它的理解和它有什么作用呢?

[css] 你有用过IE css的expression表达式吗&#xff1f;说说你对它的理解和它有什么作用呢&#xff1f; 主要用来解决IE 低版本样式自适应的问题。 比如&#xff1a;height:expression(this.offsetHeight); 缺点&#xff1a;性能问题&#xff0c;会重复执行&#xff0c;可达 10…

Java 面试题(1)——java基础

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一些Java面试题和答案。 这些答案都是自己想的&#xff0c;如果有理解不一样的&#xff0c;欢迎交流。 部分原题来自&#xff1a; https://blog.csdn.net/qq_41790443/article/details/80694415 1. HashMap的源码&#xff0…

关于我的代码在课上第一时间没有运行出来这件事

日期&#xff1a;2018.11.15 博客期&#xff1a;024 星期四 今天上课老师又出题了&#xff0c;这次的题目是去利用文件的读写去完成文件的读写答题&#xff01;那为什么我没有第一时间做出来呢&#xff1f;原因我分析了以下几点&#xff1a; 1、我第一时间对题意没有准确的审视…

[css] 有哪些方式可以对一个DOM设置它的CSS样式?

[css] 有哪些方式可以对一个DOM设置它的CSS样式&#xff1f; 1.可以使用行内样式 2.可以使用style标签 3.可以使用link引入css文件 4.可以使用js动态修改个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨…

【Shiro】Unsatisfied dependency expressed through method 'securityManager' parameter 3

大家好&#xff0c;我是烤鸭&#xff1a; 采坑记录&#xff0c;springboot 整合 shiro。 环境&#xff1a; springboot 2.0.5.RELEASE shiro-spring 1.4.0 shiro-redis 3.1.0 1.问题 org.springframework.beans.factory.UnsatisfiedDependencyException: Error crea…