添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
要出家的钥匙扣  ·  java异常 ...·  1 年前    · 
知识渊博的帽子  ·  scrapy ...·  1 年前    · 
笑点低的机器猫  ·  gcm ...·  1 年前    · 

写在前面:首先,网上90%的解决方法是在使用getInputStream()之前先getResponseCode()获取状态码进行判断:如果出错,就用getErrorStream();不出错就用getInputStream()。不得不说这种方法脑洞真奇怪。我们要做的是从根源解决问题,而不是主动对问题视而不见。既然你getInputStream()出错了,返回的状态码不对,你就应该去从根本解决问题啊,是400就找400引发的根源,是404就去看链接是不是写的不对,是500就去程序里debug哪里出错了;换了个getErrorStream()去获取数据,要么获取到的是空的,要么就是对应的状态码数据,比如400,那就是bad request,404,那就是not found。获取这个有啥用呢?只有极少数的解决方法是从getInputStream()的源码去分析问题,另外的极少数是从状态码的根源去着手。
我的问题如下图:
在这里插入图片描述

部分代码如下:

 if (params.getEndpoint().startsWith("http")) {
                if (params.getEndpoint().startsWith("https")) {
                    url = new URL("https", host, 80,
                        "/" + params.getBucket() + "/" + key + imageParams);
                } else {
                    url = new URL("http", host, 80,
                        "/" + params.getBucket() + "/" + key + imageParams);
            conn = (HttpURLConnection) url.openConnection();
            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setRequestMethod("GET");
            conn.connect();
            int code = conn.getResponseCode();
            inputStream = conn.getInputStream();

同一个方法,不同的key,得到了不同的状态码。开始还以为是不同的接口里的具体处理方式不同,可能是因为URL长度导致的400错误。后来重新用了几个参数才发现不是这样,并且两个URL链接放在浏览器里面是可以访问的(图中debug时URL的值)。这个问题困扰了我好久,直到我把链接从浏览器复制下来,大概长这样

.........(前面的省略)picUri=devpictures/2020110911/E%E5%AE%9E%E6%96%BD2.0%E6%B5%8B%E8%AF%95%E8%BD%A6%E5%9C%BA/20201109112729.995_plateinfo_17511111181123.%E6%97%A0%E7%89%8C.full.jpg&compressFlag=1

可以很清楚得看到,链接里面的中文汉字都被转换成形如了E%E5%AE%9E%E6%96%这种形式。恍然大悟的我才明白是那个相对较长的链接里有中文字符未处理,果断把代码从之前的改成了下面的形式

 url = new URL("https", host, 80, "/" + params.getBucket() + "/" + key + imageParams);
url = new URL("https", host, 80,"/" + params.getBucket() + "/" + URLEncoder.encode(key, "utf-8") + imageParams);

问题完美解决!

注:URLEncoderencode()方法会将链接的所有特殊字符转换成特定的编码(比如utf-8)。用的时候注意不要把不必要转换的字符一并转了,比如http://里的://也属于特殊字符。

java httpUrlConnection 调用远程接口报4001.问题的出现:线下开发时候使用httpUrlConnction测试调用远程接口一点问题都没有,但是打包后放到线上去后出现400的错误同样的参数在线下可以调试,放在线上就不行了。分析一般报400说明接口接收到了错误的参数,由于是远程调用别人的服务器接口看不到那边的日志,我们这边只有一个400 ,信息提示说对面json解析错误。那么我... 问题背景: 很多人在客户端做http请求的时候,往往会执行完getOutputStream之后就立即执行getInputStream去获取服务端返回的数据,这种方式大多数情况下也能正确的完成http交互,但是当网络出现故障或者服务端自定义了大于400的响应码时,就会出现getInputStream抛出FileNotFoundException的异常,文件找不到? 理论依据: 用Java访问第三方接口时报400,打断点查看时在getInputStream()方法执行时抛出了异常 解决:判断响应码getResponseCode()不是200,201,202的话,使用getErrorStream()而不是直接getInputStream() * 获取url网址返回的数据内容 * @param urlStr * @return public s... 在项目中遇到了一个HttpURLConnection网络请求报异常问题 java.io.FileNotFoundException,后来通过debug定位到具体得问题出现在 urlConnection.getInputStream()上。HttpURLConnection POST请求时,当getResponseCode为HttpURLConnection.HTTP_OK(200)和HttpURLConnection.HTTP_CREATED(201)时正常连接,其他值时比如(403),httpURL 其实问题很简单,就是很正常的HttpURLConnection POST连接,当getResponseCode为HttpURLConnection.HTTP_OK(200)和HttpURLConnection.HTTP_CREATED(201)时没有任何问题。 记录一次使用HttpURLConnectionHttpsURLConnection获取文件400报错问题,及解决办法。话不多说直接上代码。请求路径,http:// 192.168.57.** :8080/upload/file/小学生报名表_20220829215306A002.xlsx报错如下:400。 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; public class ToInter... java httpUrlConnection 调用远程接口报400 1.问题的出现: 线下开发时候使用httpUrlConnction测试调用远程接口一点问题都没有,但是打包后放到线上去后出现400的错误同样的参数在线下可以调试,放在线上就不行了。 一般报400说明接口接收到了错误的参数,由于是远程调用别人的服务器接口看不到那边的日志,我们这边只有一个400 ,信息提示说对面jso... 我正在使用HttpURLConnection上传图像文件,该图像文件包含所有标头的5MB文件大约需要3秒,但是当我使用.getInputStream()打开InputStream时,该方法大约需要8秒才能返回流.这是一个问题,因为如果我要上传多个图像,则上传进度栏似乎提供了错误的UX,每次上传之间它们都有相当大的暂停时间,因此进度栏在两次上传之间仅停留了几秒钟.我已经进行了一些谷歌搜索,但是似乎没... 参见英文答案 >get body of Bad Request httpURLConnection.getInputStream()3个我使用以下代码向我的Web服务发送JSON请求,并且对于错误请求,我返回400消息代码以及有效负载中的详细JSON错误响应.我不明白在使用HttpURLConnection时如何在客户端... 后台使用http请求获取其他服务的数据,使用GET请求在url后面拼接参数发送请求。在本地编写对端的测试接口进行测试。每次代码走到HttpURLConnection对象的getInputStream()方法时都会阻塞,在测试接口内打的断点也没有走到,然后尝试通过浏览器直接输入url请求接口成功进入断点。。。 后来反复测试无意中将接收请求的接口内断点都去掉,http请求竟然执行成功。。。有没有大神... 通过url链接获取文件流报400错误 在实际开发过程中,我遇到一个同一份代码,在本地测试和线上测试出现不同结果问题。其问题定位找到是因为通过HttpUrlConnection获取url文件流报错400。 通过在网上查找该方法报错400的解决办法,根据网上所说有的是因为url里包含空格,需要转换成%20 if(urlPath.contains(" ")){ urlPath = urlPath.replace(" ","%20"); 但是,我通过这种方式设置还是一样未解决问题。还有很多人说设置UR