2014-09-05 11 views
5

Ich erhalte die java.lang.IllegalStateException: Already connected Ausnahme beim Versuch, eine HTTPS GET Anfrage mit HttpsURLConnection API ausführen zu laufen.java.lang.IllegalStateException: Bereits bei setDoOutput verbunden

Bitte unter dem Code finden:

HttpsURLConnection con = null; 

    try { 
     URL obj = new URL(url); 
     con = (HttpsURLConnection) obj.openConnection(); 

     con.setRequestMethod("GET"); 
     con.setRequestProperty("Authorization", header); 
     con.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); 
     String urlParameters = "schema=1.0&form=json&byBillingAccountId={EQUALS,[email protected]}"; 

     con.setDoOutput(true); 

     DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     int responseCode = con.getResponseCode(); 

     System.out.println("Response Code = " + responseCode); 

     BufferedReader in = new BufferedReader(
       new InputStreamReader(con.getInputStream())); 
     String inputLine; 
     StringBuffer response = new StringBuffer(); 

     while ((inputLine = in.readLine()) != null) { 
      response.append(inputLine); 
     } 
     in.close(); 
     con.disconnect(); 
     //print result 
     System.out.println("Response = " + response.toString()); 


    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if(con!=null) con.disconnect(); 
    } 

nicht sicher, warum ich das immer.

Irgendeine Idee, wie man das löst?

Stack Trace

java.lang.IllegalStateException: Already connected 
at java.net.URLConnection.setDoOutput(Unknown Source) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(Unknown Source) 
at com.comcast.ccp.xbo.testing.partnerdevices.AppTest.testReadProperties(AppTest.java:65) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:200) 
at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:155) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212) 
at org.testng.internal.Invoker.invokeMethod(Invoker.java:707) 
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
at org.testng.TestRunner.privateRun(TestRunner.java:767) 
at org.testng.TestRunner.run(TestRunner.java:617) 
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
at org.testng.TestNG.run(TestNG.java:1057) 
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 
+0

Stapelüberwachung bitte – StackFlowed

+0

dem Stack-Trace – user1356042

Antwort

3

Nach this question setDoOutput für PUT und POST-Anforderungen verwendet (sie eine Anfrage-Entity-Body enthalten). Es gibt also einen Konflikt mit Ihrer manuell gesetzten Anfrage-Methode GET.

Sie verwenden GET, so dass die URL-Parameter wie in this question festgelegt werden sollten, und Sie können nur SetDoOutput entfernen.

Auch Content-Type macht keinen Sinn, mit GET-Anfragen stellen (source)

+0

Dank hinzugefügt ... das wird das Problem behoben. Dies führt zu einem weiteren Problem, das gelöst werden muss, und das ist das Festlegen eines Authentifizierungsheaders für diese https-Verbindung. con.setRequestProperty ("Authorization", header) scheint den Header nicht zu setzen. Irgendeine Idee? – user1356042

+0

Vielleicht hilft das Entfernen des falschen/nicht benötigten Content-Type-Headers? – DaniEll

+0

wurde entfernt, aber der Server gibt 401 zurück, was bedeutet, dass ein Authentifizierungsproblem vorliegt und der Header nicht gesetzt ist. – user1356042

Verwandte Themen