java.net.SocketException:使用 HTTPConnection 重置连接

2024-03-12

我正在尝试使用一些外部 API 来获取一些数据。当数据量很小时,一切正常,但是当 API 返回的数据量很大时,我得到连接重置例外。下面的代码来自java类InterfaceHelper,我还在出现异常的行no处标记了注释[它在尝试从 InputStream 读取数据时].

我尝试搜索有关 STACKOVERFLOW 本身的很多问题,但没有找到合适的答案。因此,请不要将其标记为重复问题。我想知道这个问题背后的原因是什么,以及这个问题的正确解决方案是什么。如果您发现此问题重复,请先回答它,然后再将其标记为重复。我赌你。

在下面找到我使用过的代码。 URL 是一些虚拟 URL,出于安全原因,我无法提及我使用的实际 URL。

 try{
        URL url = new URL("http://example.com/someParams/SOME-ACCESS-TOKEN");
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
        connection.setRequestProperty("Content-Language", "en-US");
        connection.setRequestProperty("X-EXAMPLE-LOGIN", "XXXXXXXX");
        connection.setRequestProperty("X-EXAMPLE-PASSWORD", "XXXXXX");
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        DataInputStream input = new DataInputStream(connection.getInputStream());
        String  ret = "";
        if(input!=null){
            for( int c = input.read(); c != -1; c = input.read() ) { //InterfaceHelper.java:695
                ret = ret + String.valueOf((char)c);
            }
        }

         if(input!=null)
             input.close();
         if(connection!=null)
             connection.disconnect();

                if(ret!=null && ret.length()>0){
                    return ret;
                }

    }catch(Exception e) {
        e.printStackTrace();
    } 

这是我得到的例外

        java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:196)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
        at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554)
        at sun.security.ssl.InputRecord.read(InputRecord.java:509)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
        at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
        at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
        at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:244)
        at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:689)
        at java.io.FilterInputStream.read(FilterInputStream.java:133)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3053)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3047)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3035)
        at java.io.FilterInputStream.read(FilterInputStream.java:83)
        at com.lsa.akosha.util.InterfaceHelper.hitApiBrandWatch(InterfaceHelper.java:695)
        at com.lsa.akosha.service.brand.BrandCronService.brandSentiments(BrandCronService.java:288)
        at com.lsa.akosha.util.thread.BrandWatchCronConverse.executeInternal(BrandWatchCronConverse.java:60)
        at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)

也许这只是怪癖,但我在你的帖子中发现了一些“奇怪”的东西。

  1. 您使用 SSL 连接(如堆栈跟踪中所示),但在提供的示例中,这根本不是 HTTPS。
  2. application/x-www-form-urlencoded 标头通常与 POST 请求一起使用。对此的完整解释请阅读here https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data

我只是说这在某种程度上可能会产生误导。

现在关于问题本身。

总而言之 - 连接重置意味着由于某种原因客户端和服务器之间的连接被破坏。例如,服务器决定关闭连接。 这里的调试过程可能非常棘手,所以如果我是你, 我会尝试几种技术,具体取决于您正在工作的环境:

  1. 删除 SSL 并使用纯 HTTP。这样您就可以在中间放置代理并更好地分析网络流量。像这样的东西Burp http://portswigger.net/burp/可以在这里提供帮助。

  2. 尝试消除某些防火墙/代理/任何东西因其自身原因而转储连接的可能性。也许值得在与服务器相同的机器上运行此代码(当然,如果它是一个可行的选项),只是为了测试它如何与“localhost”一起工作,你知道。

  3. 我不太熟悉这个相当低级的 API,但知道它的所有怪癖。 但也许您可以使用 HttpClient 来代替,这样您可能就不需要知道所有“低级”标志,也许那里出了问题。

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.net.SocketException:使用 HTTPConnection 重置连接 的相关文章

随机推荐

  • Hibernate删除一条记录,但该记录并没有消失?

    编辑 哎呀 我想如果我发布删除代码会有帮助 对不起 delete from permanent store and local list int index get record to delete if entityList getEnt
  • 找不到与 net.tcp 方案匹配的基地址

    我已将文件传输服务从 basicHttpBinding 移至 netTcpBinding 因为我正在尝试设置双工模式通道 我也开始了我的net tcp 端口共享服务 我目前正在开发中 并且在 xp 盒子上自行托管 直到我们移动 应用程序到开
  • 使用 Brave 浏览器的 Puppeteer?

    我想知道是否可以使用 Brave 浏览器而不是基本版本的 chromium 来执行 puppeteer 脚本 我知道 Brave 是从 chromium 开发的 因此您可以使用 Brave 启动 selenium 脚本 但您知道 puppe
  • 查找数组中两个最相似的值 (Java)

    我有一个整数数组 我想找到两个最相似的值 差异最小 例子 如果数组中的值是80 100 500 600 501 505 两个最相似的值是500 and 501 我怎样才能做到这一点 这似乎是个小任务 我们可以这样解决这个问题 1 应用任何有
  • tomcat在关闭之前是否等待应用程序线程完成?

    当我们使用 shutdown sh 脚本关闭 tomcat 时 它是等待应用程序线程完成还是杀死它们并关闭 tomcat Tomcat 尝试终止应用程序线程 但如果失败 则日志中可能会显示如下错误消息 严重 Web 应用程序似乎已启动一个线
  • WordPress:在子主题中覆盖父主题类功能

    我想重写子主题中的函数 该函数在父主题的类中定义 这是示例代码 class A extends B function construct this gt add ajax sync post data need to override ot
  • Git Clone:权限被拒绝(公钥)。致命:无法从远程存储库读取

    我正在使用 bitbucket 并尝试使用以下命令克隆存储库 sudo git clone email protected cdn cgi l email protection KassaK mbf git 我收到此错误 Permissio
  • 在gwt中添加外部js

    我在 GWT 中编写并检查了我的 js 代码 为了检查 我在 projectName html 文件中添加了我的 js 代码并且它有效 但是当我尝试添加外部 js 文件时 出现错误 WARN 404 GET
  • 调整图像大小时添加细白线

    当我们调整图像大小时 下载之后并将其存储到文档目录之前 通过以下代码 UIImage resizeImage UIImage image withSize CGSize newSize float actualHeight image si
  • 删除bash中每行的最后一个单词

    我正在尝试浏览一个文件 并删除每行中的最后一个单词 目前 我正在使用命令 sed s n old txt gt new txt 但结果显示 old txt 与 new txt 相同 感谢您的帮助 如果我能澄清这个问题 请告诉我 另外 为了定
  • 使用 JXL 将图像插入 Excel 文件而不拉伸它

    我可以使用 jxl 将图像插入到我的 excel 文件中sheet addImage WritableImage obj 我的问题是 它根据以下参数进行延伸WritableImage 我想知道是否有一种方法可以使我插入的图像不会像插入 20
  • SendGrid SMTP API:嵌入图像:错误请求

    我正在使用 sendgrid SMTP APIhttps github com sendgrid sendgrid csharp https github com sendgrid sendgrid csharp发送电子邮件 但我不知道如何
  • 在Python中,为什么负数的偶次方仍然是负数? [复制]

    这个问题在这里已经有答案了 在Python中 gt gt gt i 3 gt gt gt i 4 81 Why is i 4不评价为 i 4 但作为 i 4 我想有人可能会争辩说 求幂优先于 隐式 乘法i减一 即你应该阅读 1 i 4 但我
  • 如何在gdb中调用汇编?

    在 gdb 中我可以使用call运行函数 但是如果我想运行一些额外的程序集怎么办 Prior to GCC 5 1 I don t know of a way to run arbitrary machine code unless you
  • character_set_connection 的目的是什么?

    刚刚读过 Stefan Gehrig 的精彩回答是否需要 设置字符集utf8 https stackoverflow com questions 1566602 is set character set utf8 necessary 它比
  • 此错误是什么意思“NATURAL join 中使用的列不能有限定符”

    执行下面的代码后 我收到 ORA 25155 错误 SELECT p prod id prod name prod list price quantity sold cust last name FROM products p NATURA
  • 使用计数器和条件结束循环

    在Python中 我可以实现一个带有步数计数器和停止条件的循环作为经典案例for loop for i in range 50 result fun i print i result if result 0 break where fun
  • Jquery 在 onload 上执行 onchange 事件

    我有一个函数 可以在更改事件时运行后期操作 select marca change function var marca select marca option selected attr value select modello html
  • 从 webWorker 访问 localStorage

    WebWorker 可以访问 localStorage 吗 如果不是为什么不呢 从安全角度来看有问题吗 Web Worker 只能访问以下内容 XMLHttpRequest https developer mozilla org en US
  • java.net.SocketException:使用 HTTPConnection 重置连接

    我正在尝试使用一些外部 API 来获取一些数据 当数据量很小时 一切正常 但是当 API 返回的数据量很大时 我得到连接重置例外 下面的代码来自java类InterfaceHelper 我还在出现异常的行no处标记了注释 它在尝试从 Inp