1

httpurlconnection (または httpsurlconnection) の作成に問題があります。実際には、これは url.openconnection.Before をキャストした後に接続ヘッダーを設定することです。実行中の同じコードは現在実行されていません。理解できませんでした。(例外: 既に接続されている... など)

httpConn.getOutPutStream();まで実行される場合があります。この時点で、「java.net.ProtocolException: リクエスト ヘッダーが既に送信されているため、OutputStream を使用できません!」というエラーが発生します。

私のせいはどこですか??

コードを使用する前: すべてのコードはこちら(このコードについては別の質問もあります)

URL url = new URL(getUrl());
URLConnection conn = url.openConnection();
HttpURLConnection httpConn=(HttpURLConnection)conn; /*or HttpsURLConnection*/
httpConn.set...
...
httpConn.connect();
...

キャスト後にいくつかの設定をしようとしましたが、結果は同じです。conn.set .. は機能していますが、キャストした後は何も設定できません...

変更されたコード:

        URL url = new URL(getUrl());
        conn = url.openConnection();
        conn.setAllowUserInteraction(false);
        conn.setConnectTimeout(10000);
        conn.setRequestProperty("Accept-Charset", "utf-8");
        conn.setRequestProperty("Content-Type",
                "text/xml; charset=utf-8");
        conn.setRequestProperty("SOAPAction",
                "http://tempuri.org/IAuthenticationServiceNew/Authenticate");
        conn.setRequestProperty("Software-Version", AppData.VERSION);
        conn.setDoOutput(true);
        httpConn = (HttpsURLConnection) conn;
        httpConn.setChunkedStreamingMode(getParams().getBytes("UTF8").length);
        httpConn.setInstanceFollowRedirects(true);

        httpConn.connect();
        os = httpConn.getOutputStream();
        os.write(getParams().getBytes("UTF8"));
4

1 に答える 1

1

これは正しいです!
「httpConn.setInstanceFollowRedirects(true)」は、サーバーに接続してヘッダーを送信します。このコードを閉じます。

        URL url = new URL(getUrl());
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setDoInput(true);
        httpConn.setDoOutput(true);
        httpConn.setAllowUserInteraction(false);
        httpConn.setUseCaches(false);
        httpConn.setConnectTimeout(10000);
        httpConn.setRequestProperty("Accept-Charset", "utf-8");
        httpConn.setRequestProperty("Content-Type",
                "text/xml; charset=utf-8");
        httpConn.setRequestProperty("SOAPAction",
                "http://tempuri.org/IAuthenticationServiceNew/"
                        + conTypeString);
        httpConn.setRequestProperty("Software-Version", AppData.VERSION);
        httpConn.setRequestMethod("POST");
        httpConn.setChunkedStreamingMode(0);
        os = httpConn.getOutputStream();
        os.write(getParams().getBytes("UTF8"));
于 2011-10-17T10:58:29.257 に答える