java.net.SocketException: Connection reset With HTTPConnection -


i trying hit external api fetch data. when data size small, works fine when size of data returned api big connection reset exception. below code java class interfacehelper , have marked comment @ line no getting exception [its while trying read data inputstream].

i have tried search many question on stackoverflow didn't find appropriate answer. please don't mark duplicate question. want know reason behind problem, , proper solution problem. if find question duplicate please answer before marking duplicate. dare you.

find below code have used. url dummy url security reason cannot mention actual url have used.

 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();     }  

this exception get

        java.net.socketexception: connection reset         @ java.net.socketinputstream.read(socketinputstream.java:196)         @ java.net.socketinputstream.read(socketinputstream.java:122)         @ sun.security.ssl.inputrecord.readfully(inputrecord.java:442)         @ sun.security.ssl.inputrecord.readv3record(inputrecord.java:554)         @ sun.security.ssl.inputrecord.read(inputrecord.java:509)         @ sun.security.ssl.sslsocketimpl.readrecord(sslsocketimpl.java:927)         @ sun.security.ssl.sslsocketimpl.readdatarecord(sslsocketimpl.java:884)         @ sun.security.ssl.appinputstream.read(appinputstream.java:102)         @ java.io.bufferedinputstream.fill(bufferedinputstream.java:235)         @ java.io.bufferedinputstream.read1(bufferedinputstream.java:275)         @ java.io.bufferedinputstream.read(bufferedinputstream.java:334)         @ sun.net.www.http.chunkedinputstream.fastread(chunkedinputstream.java:244)         @ sun.net.www.http.chunkedinputstream.read(chunkedinputstream.java:689)         @ java.io.filterinputstream.read(filterinputstream.java:133)         @ sun.net.www.protocol.http.httpurlconnection$httpinputstream.read(httpurlconnection.java:3053)         @ sun.net.www.protocol.http.httpurlconnection$httpinputstream.read(httpurlconnection.java:3047)         @ sun.net.www.protocol.http.httpurlconnection$httpinputstream.read(httpurlconnection.java:3035)         @ java.io.filterinputstream.read(filterinputstream.java:83)         @ com.lsa.akosha.util.interfacehelper.hitapibrandwatch(interfacehelper.java:695)         @ com.lsa.akosha.service.brand.brandcronservice.brandsentiments(brandcronservice.java:288)         @ com.lsa.akosha.util.thread.brandwatchcronconverse.executeinternal(brandwatchcronconverse.java:60)         @ org.springframework.scheduling.quartz.quartzjobbean.execute(quartzjobbean.java:113)         @ org.quartz.core.jobrunshell.run(jobrunshell.java:213)         @ org.quartz.simpl.simplethreadpool$workerthread.run(simplethreadpool.java:557) 

maybe quirks, i've found "weird" things in post.

  1. you use ssl connection (as appears in stacktrace) in provided example no https @ all.
  2. application/x-www-form-urlencoded header used post requests. full explanation on read here

i'm saying can misleading extent.

now regarding question itself.

all-in-all - connection reset means reason connection between client , server broken. example, server decides close connection. debugging process can tricky here, if you, have tried couple of techniques, depending on environment you're working on:

  1. remove ssl , work plain http. way can put proxy in-between , analyze network traffic better. stuff burp can here.

  2. try eliminate possibility firewall/proxy/whatever dumps connection own reasons. maybe worth run code in same machine server (of course if viable option) sake of testing how works "localhost", know.

  3. i'm not familiar low level api , know quirks. maybe can use httpclient instead, way you'll eliminate need know "low-level" flags, maybe wrong there.

hope helps


Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -