android - "Connection already established" exception in HttpsURLConnection -


i trying post request using httpsurlconnection, , get

java.net.protocolexception: connection established 

on setrequestmethod weirdly, conn.connected returns false before.

what missing?

url url = new url("https://ws.audioscrobbler.com/2.0/"); httpsurlconnection conn = (httpsurlconnection) url.openconnection(); conn.setreadtimeout(15000); conn.setconnecttimeout(15000); // here conn.connected false conn.setrequestmethod("post"); // here java.net.protocolexception: connection established conn.setdoinput(true); 

edit

i tried defaulthttpclient , works, i'll use instead.

for else runs problem, had order of operations issue affected me when doing http post had content in request body. it's not entirely clear in scenarios when httpurlconnection initiating connection server.

my initial request looked this:

        httpurlconnection conn = null;         try         {             conn = (httpurlconnection) baseurl.openconnection();               conn.setconnecttimeout(connecttimeoutmillis);             conn.setreadtimeout(requesttimeoutmillis);              //required reading response body             conn.setdoinput(true);              //not request types have body (e.g. doesn't)             if(requestbody != null && requestbody.length > 0)             {                 conn.setdooutput(true);                 conn.setfixedlengthstreamingmode(requestbody.length);                 conn.getoutputstream().write(requestbody);                 conn.getoutputstream().flush();                 conn.getoutputstream().close();             }              try             {                 conn.setrequestmethod(verb.touppercase());             }             catch (final protocolexception e)             {                 response.seterror("invalid http verb \"" + verb + "\" received.","");                 log.e(tag, response.errormessage, e);                 return response;             } 

it turns out cannot call "conn.setrequestmethod(...)" after you've called "conn.getoutputstream()", in case, simple fix call "conn.setrequestmethod(...)" before dealing writing request body. working code is:

httpurlconnection conn = null;         try         {             conn = (httpurlconnection) baseurl.openconnection();               conn.setconnecttimeout(connecttimeoutmillis);             conn.setreadtimeout(requesttimeoutmillis);              //required reading response body             conn.setdoinput(true);              try             {                 conn.setrequestmethod(verb.touppercase());             }             catch (final protocolexception e)             {                 response.seterror("invalid http verb \"" + verb + "\" received.","");                 log.e(tag, response.errormessage, e);                 return response;             }              //not request types have body (e.g. doesn't)             if(requestbody != null && requestbody.length > 0)             {                 conn.setdooutput(true);                 conn.setfixedlengthstreamingmode(requestbody.length);                 conn.getoutputstream().write(requestbody);                 conn.getoutputstream().flush();                 conn.getoutputstream().close();             } 

the real change switching ordering of calls , got rid of exception. fixes issue else had problem.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -