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
Post a Comment