当前位置: 首页 > news >正文

用HttpURLConnection复现http响应码405

目录

  • 使用GET方法,访问GET接口,服务端返回405
  • 使用GET方法,访问POST接口,服务端返回405
  • 使用POST方法,访问GET接口,服务端返回405

使用GET方法,访问GET接口,服务端返回405

发生场景:
复制的POST请求代码,手动修改为GET,没有修改彻底,导致错误。

错误代码:

public class GET405 {public static void main(String[] args) {try {String defURL = "https://httpbin.org/get";URL url = new URL(defURL);// 打开和URL之间的连接HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("GET");//请求get方式con.setDoInput(true);// 默认值为 truecon.setDoOutput(true);//默认值为 false,传body参数必须写// 得到请求的输出流对象OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), "UTF-8");String body = "username=xiaohu&password=123456";writer.write(body);writer.flush();//            System.out.println("http请求方法:"+con.getRequestMethod());System.out.println("http状态码:" + con.getResponseCode());// 获取服务端响应,通过输入流来读取URL的响应InputStream is = con.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();// 关闭连接con.disconnect();// 打印读到的响应结果System.out.println("运行结束:" + sbf.toString());} catch (Exception e) {e.printStackTrace();}}
}

报错log:

405原因:
con.getOutputStream() 会把原有的GET方法改为POST方法,用POST方法访问GET接口,就报错405。看jdk1.8中HttpURLConnection的getOutpuStream()方法的源码:

解决办法:删掉getOutputStream(),用url传参。

正确代码:

public class GET200 {public static void main(String[] args) {try {String defURL = "https://httpbin.org/get";String body = "username=xiaohu&password=123456";URL url = new URL(defURL+"?"+body);// 打开和URL之间的连接HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("GET");//请求get方式//          System.out.println("http请求方法:"+con.getRequestMethod());System.out.println("http状态码:" + con.getResponseCode());// 获取服务端响应,通过输入流来读取URL的响应InputStream is = con.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();// 关闭连接con.disconnect();// 打印读到的响应结果System.out.println("运行结束:" + sbf.toString());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

http状态码:200
运行结束:{"args": {"password": "123456", "username": "xiaohu"}, "headers": {"Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Host": "httpbin.org", "User-Agent": "Java/1.8.0_221", "X-Amzn-Trace-Id": "Root=1-668a1ba0-278338c97b93d6ca4276c0b0"}, "origin": "113.57.25.151", "url": "https://httpbin.org/get?username=xiaohu&password=123456"
}

使用GET方法,访问POST接口,服务端返回405

发生场景:接口文档显示接口为GET接口,实际上后端人员写的是POST接口,文档没同步。

错误代码:

public class GETtoPOST405 {public static void main(String[] args) {try {String defURL = "https://httpbin.org/post";String body="username=xiaohu&password=123456";URL url = new URL(defURL + "?" + body);HttpURLConnection con = (HttpURLConnection) url.openConnection();
//          con.setUseCaches(false); // Post请求不能使用缓存con.setRequestMethod("GET");//请求get方式con.setDoInput(true);// 设置是否从HttpURLConnection输入,默认值为 truecon.setDoOutput(false);// 设置是否使用HttpURLConnection进行输出,默认值为 falseint code = con.getResponseCode();System.out.println("http状态码:" + code);if (code == HttpURLConnection.HTTP_OK) {System.out.println("测试成功");} else {System.out.println("测试失败:" + code);}// 获取服务端响应,通过输入流来读取URL的响应InputStream is = con.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();// 关闭连接con.disconnect();// 打印读到的响应结果System.out.println("运行结束:" + sbf.toString());} catch (Exception e) {e.printStackTrace();}}
}

报错log:

http状态码:405
测试失败:405Caused by: java.io.IOException: Server returned HTTP response code: 405 for URL: https://httpbin.org/post?username=xiaohu&password=123456

405原因:不知道后端接口的定义,或者没有沟通彻底,或者后端开发人员失误,本应该是GET定义成了POST。应该使用POST方法。

解决方法:使用POST请求。

正确代码:

public class POSTtoPOST200 {public static void main(String[] args) {try {String defURL = "https://httpbin.org/post";URL url = new URL(defURL);HttpURLConnection con = (HttpURLConnection) url.openConnection();
//          con.setUseCaches(false); // Post请求不能使用缓存con.setRequestMethod("POST");//请求POST方式con.setDoOutput(true);// 设置是否使用HttpURLConnection进行输出,默认值为 falseOutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), "UTF-8");String body = "username=xiaohu&password=123456";writer.write(body);writer.flush();int code = con.getResponseCode();System.out.println("http状态码:" + code);if (code == HttpURLConnection.HTTP_OK) {System.out.println("测试成功");} else {System.out.println("测试失败:" + code);}// 获取服务端响应,通过输入流来读取URL的响应InputStream is = con.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();// 关闭连接con.disconnect();// 打印读到的响应结果System.out.println("运行结束:" + sbf.toString());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

http状态码:200
测试成功
运行结束:{"args": {}, "data": "", "files": {}, "form": {"password": "123456", "username": "xiaohu"}, "headers": {"Accept": "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Content-Length": "31", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "Java/1.8.0_221", "X-Amzn-Trace-Id": "Root=1-668a2091-2a64856935929fab74082ce4"}, "json": null, "origin": "113.57.25.151", "url": "https://httpbin.org/post"
}

使用POST方法,访问GET接口,服务端返回405

发生场景:代码失误,本该写GET,写成了POST。

错误代码:

public class POSTtoGET405 {public static void main(String[] args) {try {String defURL = "https://httpbin.org/get";URL url = new URL(defURL);// 打开和URL之间的连接HttpURLConnection con = (HttpURLConnection) url.openConnection();con.setRequestMethod("POST");//请求post方式
//            con.setUseCaches(false); // Post请求不能使用缓存con.setDoInput(true);// 设置是否从HttpURLConnection输入,默认值为 truecon.setDoOutput(true);// 设置是否使用HttpURLConnection进行输出,默认值为 falseOutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), "UTF-8");String body = "username=xiaohu&password=123456";writer.write(body);writer.flush();writer.close();int code = con.getResponseCode();System.out.println("http状态码:" + code);if (code == HttpURLConnection.HTTP_OK) {System.out.println("测试成功");} else {System.out.println("测试失败:" + code);}// 获取服务端响应,通过输入流来读取URL的响应InputStream is = con.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));StringBuffer sbf = new StringBuffer();String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();// 关闭连接con.disconnect();// 打印读到的响应结果System.out.println("运行结束:" + sbf.toString());} catch (Exception e) {e.printStackTrace();}}
}

405原因: 接口只接受GET方法,请求是POST方法。

错误场景:后端开发定义失误,本该是POST接口,写成了GET。接口没有测试。

解决办法:用GET访问。正确代码和GET访问GET一样。

相关文章:

用HttpURLConnection复现http响应码405

目录 使用GET方法,访问GET接口,服务端返回405使用GET方法,访问POST接口,服务端返回405使用POST方法,访问GET接口,服务端返回405 使用GET方法,访问GET接口,服务端返回405 发生场景&a…...

2-27 基于matlab的一种混凝土骨料三维随机投放模型

基于matlab的一种混凝土骨料三维随机投放模型,为混凝土细观力学研究提供一种快捷的三维建模源代码。可设置骨料数量,边界距离、骨料大小等参数。程序已调通,可直接运行。 2-27 matlab 混凝土骨料三维随机投放模型 - 小红书 (xiaohongshu.com)…...

ISA95-Part4-业务流程的解析与设计思路

MES/MOM系统实现ISA-95标准的业务流程通常遵循以下思路,并包含一系列内容。 一、功能模块: 1. 需求分析与规划: - 确定业务流程需求,包括订单管理、生产调度、库存控制等,并规划如何将这些流程与MES/MOM系统集成。 2. 系统集成架构设计: - 设计一个系统集成架构,确保M…...

【Spring Cloud】一个例程快速了解网关Gateway的使用

Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式,并为它们提供一些网关基本功能,例如&…...

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页,多媒体视频类微信小程序ui前端模板下载。包含:视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码...

数据库存储引擎

MySQL体系结构 存储引擎 -- 查询建表语句 show create table account; -- 查询引擎 show engines; InnoDB 特点 DML操作遵循ACID模型,支持事务 行级锁,提高并发访问性能支持外键约束 文件 xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样…...

【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计

系统功能: 显示时间,温湿度,体温信息,播放音乐及控制红外小夜灯,通过蓝牙模块连接手机APP。 系统上电后OLED显示“欢迎使用智能手表系统请稍后”,两秒后进入正常页面显示 第一行显示获取到的当前时间 第二行显示获…...

利用面向AWS的Thales Sovereign解决方案保护AI之旅

亚马逊网络服务(AWS)是全球最大的云服务提供商。众所周知,他们致力于提供工具、解决方案和最佳实践,使其客户能够安全地利用AWS上的生成式人工智能 (GenAI) 工作负载。组织正在迅速使用GenAI为企业带来更高的生产力和创造力。在GenAI的几乎所有用途中&am…...

学习笔记——交通安全分析13

目录 前言 当天学习笔记整理 5城市主干道交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后,本人又开始了新教材《交通安全分析》的学习 #整理过程不易,喜欢UP就点个免费的关注趴 #本期内容接上一期12笔记 当天学习笔记整理 5城市主干道交…...

PHP-实例-文件上传

1 需求 2 basename 在 PHP 中,basename() 函数用于返回路径中的文件名部分。如果路径中包含了文件扩展名,则该函数也会返回它。如果路径的结尾有斜杠(/)或反斜杠(\),则 basename() 函数会返回空…...

LeetCode刷题之HOT100之完全平方数

2024 7/7 转眼间就到周日啦!昨天下午开组会,开了三个半小时。如坐针毡,会后跑了个步、洗了个澡、洗了衣服、躺床上看了会《罪与罚》,睡着了。早上起来,去拿我昨晚充电的车,当我看到车没有停在昨天的位置&am…...

【SpringCloud应用框架】Nacos集群架构说明

第六章 Spring Cloud Alibaba Nacos之集群架构说明 文章目录 前言一、Nacos支持三种部署模式二、集群部署说明三、预备环境 前言 到目前为止,已经完成了对Nacos的一些基本使用和配置,接下来还需要了解一个非常重要的点,就是Nacos的集群相关的…...

JS进阶-作用域

学习目标: 掌握作用域 学习内容: 作用域局部作用域全局作用域作用域链JS垃圾回收机制拓展-JS垃圾回收机制-算法说明闭包变量提升 作用域: 作用域规定了变量能够被访问的"范围",离开了这个"范围"变量便不能被…...

stm32 使用GPIO模拟串口发送

在STM32微控制器上实现模拟串口输出(也称为软件串口或比特邦定(Bit-Banging)串口),主要是因为硬件上的UART资源有限或者为了特定需求而需要更多的串口通信接口。模拟串口意味着使用GPIO引脚模拟UART的TX(发…...

数据的统计探针:SKlearn中的统计分析方法

数据的统计探针:SKlearn中的统计分析方法 在数据科学领域,统计分析是理解和解释数据的关键工具。Scikit-learn(简称sklearn),作为Python中一个功能强大的机器学习库,提供了多种方法来进行数据的统计分析。…...

实例演示Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…...

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份&#xff1a;2024 作者&#xff1a;刘子耀&#xff0c;陈晨&#xff0c;南洋理工大学 期刊&#xff1a; 未发表 引用量&#xff1a;6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…...

Python数据分析实战,运输车辆驾驶行为分析,案例教程编程实例课程详解

引言 运输车辆的安全驾驶行为分析是确保道路安全、提高运输效率的重要环节。随着数据采集技术的发展和数据分析工具的普及,利用Python进行数据分析已成为这一领域的重要工具。本文将详细介绍如何使用Python进行运输车辆驾驶行为分析,涵盖数据采集、数据预处理、数据分析及结果…...

网络安全法对等级保护中的权利和义务有何规范?

在数字时代的交响乐章中&#xff0c;网络安全法与等级保护共同编织了一曲关于权利与义务的和谐旋律。《中华人民共和国网络安全法》作为我国网络安全领域的基本法&#xff0c;对等级保护提出了明确的规范&#xff0c;旨在构建一个安全、有序的网络空间。本文将深入解析网络安全…...

苹果清理软件:让你的设备焕然一新

随着时间的推移&#xff0c;无论是Mac电脑还是iOS设备&#xff0c;都可能会因为积累的垃圾文件、缓存、未使用的应用和其他冗余数据而开始表现出性能下降。这不仅会占用宝贵的存储空间&#xff0c;还可能影响设备的响应速度和电池寿命。幸运的是&#xff0c;有多种苹果清理软件…...

Windows Defender Remover完整指南:如何彻底移除Windows安全组件

Windows Defender Remover完整指南&#xff1a;如何彻底移除Windows安全组件 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_m…...

VideoAgentTrek-ScreenFilter效果展示:远程桌面RDP协议画面中窗口标题栏识别

VideoAgentTrek-ScreenFilter效果展示&#xff1a;远程桌面RDP协议画面中窗口标题栏识别 你有没有遇到过这样的场景&#xff1f;在观看远程桌面录屏或视频会议录像时&#xff0c;屏幕上密密麻麻的窗口标题栏、任务栏、系统托盘图标&#xff0c;让人眼花缭乱。特别是当需要分析…...

Tao-8k本地部署详解:基于Ubuntu系统的环境配置与优化

Tao-8k本地部署详解&#xff1a;基于Ubuntu系统的环境配置与优化 最近有不少朋友在问&#xff0c;怎么在自己的GPU服务器上把Tao-8k这个大家伙跑起来。说实话&#xff0c;第一次部署的时候我也踩了不少坑&#xff0c;从驱动版本不对到端口被占&#xff0c;各种小问题层出不穷。…...

Vertex AI 漏洞暴露谷歌云数据和非公开制品

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01;编译&#xff1a;代码卫士网络安全研究人员披露称谷歌云 Vertex AI 平台中存在一个安全“盲点”&#xff0c;可使攻击者将人工智能代理武器化&#xff0c;从而未经授权访问敏感数据并危及组织机构的云环境安全。Palo …...

Phi-3-mini-4k-instruct-gguf惊艳生成效果:5类中文任务(问答/改写/总结/建议/介绍)实测

Phi-3-mini-4k-instruct-gguf惊艳生成效果&#xff1a;5类中文任务实测 1. 模型介绍与测试背景 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理中文的问答、文本改写、摘要整理和简短创作等任务。相比大型语言模型&#x…...

突破网盘下载瓶颈:技术工具革新文件获取效率

突破网盘下载瓶颈&#xff1a;技术工具革新文件获取效率 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

Fish Speech 1.5教育场景应用:AI教师语音生成+多语种课件配音案例

Fish Speech 1.5教育场景应用&#xff1a;AI教师语音生成多语种课件配音案例 1. 引言&#xff1a;教育语音合成的痛点与解决方案 你有没有遇到过这样的情况&#xff1f;深夜备课到凌晨&#xff0c;还要为明天的课程录制语音讲解&#xff1b;或者需要制作多语言版本的教学内容…...

OpenClaw+Phi-3-vision-128k-instruct安全方案:敏感数据本地化处理指南

OpenClawPhi-3-vision-128k-instruct安全方案&#xff1a;敏感数据本地化处理指南 1. 为什么需要本地化处理敏感数据&#xff1f; 上周我帮一位做财务咨询的朋友处理季度报表时&#xff0c;他提到一个痛点&#xff1a;每次用云端AI工具分析客户财务数据都提心吊胆。这让我意识…...

Cesium实战:5分钟搞定飞机轨迹飞行与流光道路效果(附完整代码)

Cesium实战&#xff1a;5分钟实现飞机轨迹飞行与流光道路特效 第一次接触Cesium时&#xff0c;我就被它强大的三维地理可视化能力震撼了。作为一个长期从事WebGIS开发的工程师&#xff0c;我一直在寻找能够快速实现复杂三维场景的工具。直到遇到Cesium.js&#xff0c;才发现原来…...

SEO_ 详解SEO优化中内容与外部链接的建设策略

SEO优化中内容与外部链接的建设策略 在当前互联网营销领域&#xff0c;SEO优化&#xff08;搜索引擎优化&#xff09;是提升网站流量和品牌知名度的关键手段。其中&#xff0c;内容与外部链接的建设策略是两大核心要素。本文将详解SEO优化中内容与外部链接的建设策略&#xff…...