1

HttpUrlConnection を使用して、Android アプリケーションから php サーバー - drupal cms Web サイトへの投稿データ (ログイン用の JSON 形式のユーザー名とパスワード) を試みています。ログイン用の私のコードは次のとおりです。私はこの応答を得ています:

java.net.ProtocolException: 要求ヘッダーが既に送信されているため、OutputStream を使用できません!

Google やその他のスタックオーバーフローの質問を検索しましたが、問題の解決策が見つかりません。だから助けてください。

聞いてくれてありがとう。

   HttpURLConnection httpcon = null;
          int status = 0;

         try {
              httpcon = (HttpURLConnection) ((new URL("my URL here").openConnection()));
              httpcon.setDoOutput(true);
              httpcon.setRequestProperty("Content-Type", "application/json");
              httpcon.setRequestProperty("Accept", "application/json");
            httpcon.setRequestMethod("POST");

               status = httpcon.getResponseCode();

               httpcon.getHeaderFields();
               System.out.println("===================>httpcon.getHeaderFields()"+httpcon.getHeaderFields());


        } catch (ProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


          try {
            httpcon.connect(); 
             byte[] outputBytes = "{'username':'uname','password':'pass'}".getBytes("UTF-8");

             OutputStream os = httpcon.getOutputStream();
              os.write(outputBytes);




              os.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return status;
4

1 に答える 1

0

コードの最初の部分でhttpcon.getResponseCode()andを呼び出します。httpcon.getHeaderFields()の javadoc に記載されているようにHttpUrlConnection、これにより HTTP 要求が実行されます。応答ヘッダー フィールドを読み取るには応答が必要であり、応答を取得するには要求を発行する必要があるため、これは理にかなっています。

次に、リクエストがすでに送信されているために失敗する出力ストリームの処理を行います。

これを機能させるには、コードの順序を変更して、応答にアクセスする前にすべての要求がセットアップされるようにする必要があります。これらの行に沿ったもの:

byte[] outputBytes = "{'username':'uname','password':'pass'}".getBytes("UTF-8");
try {
    HttpURLConnection httpcon = (HttpURLConnection) ((new URL("my URL here").openConnection()));

    //prepare the request
    httpcon.setDoOutput(true);
    httpcon.setRequestProperty("Content-Type", "application/json");
    httpcon.setRequestProperty("Accept", "application/json");
    httpcon.setRequestMethod("POST");
    httpcon.connect(); // May not be needed
    OutputStream os = httpcon.getOutputStream();
    os.write(outputBytes);

    //get the response
    status = httpcon.getResponseCode();
    httpcon.getHeaderFields();
    System.out.println("===================>httpcon.getHeaderFields()"+httpcon.getHeaderFields());
} //catch block left out
于 2012-08-11T11:06:37.213 に答える