解决联网下载服务端返回405问题

article/2025/10/31 10:12:25

最近遇到了一个问题,在项目中有一个启动页广告图片下载的功能,之前能够正常下载,由于这个版本遇到了运营商DNS劫持的问题,服务端要调整图片的下载路径,也就是改变了图片的链接地址。修改地址之后下载就出现异常了,经过断点调试发现http请求的返回码为405,查了一下405的意思。

405 Method Not Allowed(不允许使用的方法) 不支持该Request的方法。

那么我们就知道突破点了,只需要设置正确的请求方法就可以解决问题。
原本的代码如下:

 private void downloadImage(SplashBean splashBean) {for (final SplashImage splashImage : splashBean.data.list) {String name = URLUtil.guessFileName(splashImage.image, "Content-Disposition", null);if (!TextUtils.isEmpty(splashImage.image)) {InputStream is = null;FileOutputStream fileOutputStream = null;try {URL url = new URL(splashImage.image);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setReadTimeout(5000);conn.setConnectTimeout(5000);conn.setDoOutput(true);if (HttpURLConnection.HTTP_OK != conn.getResponseCode()) {Log2345.d(TAG, "连接异常---responseCode = " + conn.getResponseCode());return;}is = conn.getInputStream();File imageFile = new File(StorageUtils.getCacheDirectory(AllianceApplication.appContext), name);fileOutputStream = new FileOutputStream(imageFile);byte[] buffer = new byte[16 * 1024];int read;while ((read = is.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, read);}is.close();fileOutputStream.close();/*** 对比文件MD5值*/String md5 = GetMD5.getMd5ByFile(imageFile);Log2345.d(TAG, "MD5对比:" + md5 + "--" + splashImage.md5);if (md5.equals(splashImage.md5)) {files.add(imageFile);}if (files.size() == splashBean.data.list.size()) {Log2345.d(TAG, "file.size = " + files.size());SharedPreferencesUtils.setSplashVersion(splashBean.data.version);}SharedPreferencesUtils.setSplashInfo(JSON.toJSONString(splashBean));} catch (Exception e) {e.printStackTrace();}}}}

通过抓包发现发送出去的请求为 POST 请求,这点就有点奇怪了,HttpURLConnection 默认的请求方法应该是 GET 求,在这里我并没有设置请求方法为什么抓包看到的是 POST 请求呢?于是在 StackOverFlow 上找到了原因。

StackOverFlow

看字面的意思是说如果调用了conn.setDoOutput(true)这个方法的话,默认的 GET 请求会改变为 POST 请求,因为 GET 请求是没有 request body 的。这就解释了之前为什么没有设置请求方法默认应该是 GET 请求,抓包缺看到的是 POST 请求了。那么只需要修改一下代码问题就解决了。

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");//设置请求方法为 GET 请求conn.setUseCaches(false);conn.setReadTimeout(5000);conn.setConnectTimeout(5000);

如上代码,删除掉setDoOutput(true)这个方法即可。这个时候问题已经解决了,请求返回码为 200 ,图片下载成功~


http://chatgpt.dhexx.cn/article/60gc889W.shtml

相关文章

IIS 405 Method Not Allowed

今天将项目发布到IIS上后,发现Delete方法用不了,可进行如下设置: 打开处理程序映射 找到WebDAV点击请求限制,勾选全部谓词 这个方法如果无效的话 方法二:因为是WebDAVModule限制的请求,所以直接将WebDAV…

前端请求接口时报405错误

他说方法不存在 他的问题所在就是没有找到后端对应的接口 意思就是说没有找到我后端put这个对应的接口 我记得写了不知道为啥没了纳闷

IIS put请求 报HTTP Error 405 - Method Not Allowed

在新的服务器上部署了一个.net core的项目,部分请求地址使用了put、delete方式,导致无法正常请求,报Error 405 - Method Not Allowed。 由于配置IIS时把“WebDAV 发布”给勾选了,所以会导致拦截。 服务器和IIS 10配置如下图&…

405 Method Not Allowed 解决方案

背景描述 前端发送请求到后端,可是经过swagger测试,后端接口是没问题的 可是一旦调用就发生405报错 解决方案 一般这种情况发生是因为前后端请求方式不一致 写在前端的接口声明方式是post 我们来看后端 很明显了,后端是get,因…

405 Method Not Allowed(亲测,实用)

今天在发布一个网站的时候遇到 标题上的问题,一直不明白是为何,刚开始以为是我的程序写的有问题,随即将项目发给同事来发布试试,在他的IIS上发布却没出现问题,一切正常,这可就怪了,于是想到了应…

宝塔面板数据库出现405 Not Allowed 错误的原因和解决办法

我们在网站建设和网站维护过程中,除了云服务器需要小心维护之外,还要应对突然出现的一些问题,比如今天网站突然打不开了,根据页面提示,貌似是数据库的原因,于是登录宝塔面板,想要看看数据库怎么…

浏览器页面报错405!

首先看浏览器的报错页面 后端控制台正常 可以明显的看出是因为我们提交的method是不被允许的,这就说明是我们的 请求方式的问题,常见的请求方式有 post,get.大家如果不知道自己默认的请求方式是get或者post,我们可以在继承HttpServlet的时候继承doGet(),…

html405是什么错误,网站打开显示405错误信息如何解决?

当我们打开网页时候,会显示404,405,500等报错信息,下面海站格给大家介绍常见的405报错时的处理方法: IIS 返回 405 - 不允许用于访问此页的 HTTP 谓词。终极解决办法!!!! 1、为什么会出现这个错误? 我们可以理解为在当前IIS服务器上&#xf…

一款ModbusRTU/TCP485串口协议调试软件工具绿色版免安装

软件的界面如下: 支持modbus设备的读写操作,把设备地址、功能码、寄存器地址、寄存器个数都显示出来了,浅析易懂,很适合初学者和工程师对modbus设备进行调试、测试。 一款好用的modbus调试大师助手软件工具操作演示,…

“405”报错解决方案

405是什么意思? 意思如下: “405”经常作为“Method Not Allowed”的缩写来使用,中文中表示:“不允许的方法”。 英文缩写词:405 英文单词:Method Not Allowed 缩写词分类:Internet 缩写词…

2.Modbus通信协议-软件调试4个工具软件(推荐)

Modbus通信协议-软件调试的4个工具软件 1.Launch Virtual Serial Port Driver 2.Modbus Poll 3.Modbus Slave 4.UartAssist 软件下载 以下为官网下载链接: Virtual Serial Port Driver Modbus Slave和Modbus Poll UartAssist 1.Virtual Serial Port Driver …

矩阵的迹规则

A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和), 在量子力学中,Tr为迹,(trace),A,B,C为矩阵,证明:(1).Tr(AB)Tr(BA) ; (2).Tr(ABC)Tr(BCA)Tr(CAB) 第一个公式直接把(AB)ii的表达式写出来,然后求和,很容易证明与(BA)ii的…

矩阵的迹(Tr)

迹运算返回的是矩阵对角元素的和: 若不使用求和符号,有些矩阵运算很难描述,而通过矩 阵乘法和迹运算符号可以清楚地表示。例如,迹运算提供了另一种描述矩阵Frobenius范数的方式: 用迹运算表示表达式,我们可以使用很多有用的等式巧…

计算矩阵的迹

关于矩阵的迹和它的性质,可以参考下面这篇文章。 矩阵的迹及相关性质 这里想运用矩阵迹的性质,计算下面这个矩阵的迹: 式子中假设是单位矩阵,是矩阵,那么根据矩阵迹的循环置换(cyclic permutation)性质: 根据矩阵迹的加法性质&a…

矩阵的迹及其一些定理证明

再写最小二乘法多元线性回归矩阵求导的时候用到了矩阵的迹和一些定理,特此在这里推导下 矩阵迹的定义: 一个nxn矩阵A的迹是指A主对角线上各元素的总和,记做tr(A) 定理: tr(AB) tr(BA) 定理: 证明如下 定理: 证明如下:

矩阵的迹

矩阵的迹 一、定义二、性质2.12.22.3 迹等于特征根之和2.4 三、二次型的迹3.13.2 四、迹的导数 一、定义 线性代数中,把方阵的对角线之和称为“迹”: 二、性质 2.1 2.2 一直将第一个矩阵放到最后一个;当然反着不断把最后一个放到第一个也…

矩阵的迹以及迹对矩阵求导

ref&#xff1a; https://blog.csdn.net/u012421852/article/details/79594933 矩阵的迹概念 矩阵的迹 就是 矩阵的主对角线上所有元素的和。 矩阵A的迹&#xff0c;记作tr(A)&#xff0c;可知tra(A)∑aii&#xff0c;1<i<n。 定理&#xff1a;tr(AB) tr(BA) 证明 定…

计算方阵的迹(主对角线上各元素之和)numpy.trace()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算方阵的迹&#xff08;主对角线上各元素之和&#xff09; numpy.trace() [太阳]选择题 以下关于python代码表述正确的一项是&#xff1f; import numpy as np A np.array([[1,2,3],[4,5…

【机器学习】汇总详解:矩阵的迹以及迹对矩阵求导

矩阵的迹概念 矩阵的迹 就是 矩阵的主对角线上所有元素的和。 矩阵A的迹&#xff0c;记作tr(A)&#xff0c;可知tra(A)∑aii&#xff0c;1<i<n。 定理&#xff1a;tr(AB) tr(BA) 证明 定理&#xff1a;tr(ABC) tr(CAB) tr(BCA) 这个是tr(AB)tr(BA)的推广定理&#x…

线代 | 矩阵的迹 向量内积如何转化为迹

符号约定: 一、定义及意义 1、数理意义是迹等于矩阵的特征值之和。 2、矩阵的二次型用迹表达为 3、矩阵特征值的平方等于矩阵平方的迹 </