2016-03-24 7 views
2

Androidドキュメントに示されているように、setDoOutPut(true);を設定して接続がPOSTとして送信されるようにしました。しかし、デバッガでHTTPURLConnectionメソッドメンバをチェックすると、setDoOutput(true)、さらにsetRequestMethod("POST")の後であっても、常にGETになります。何とかそれをGETにリセットしていますか?HttpURLConnectionメソッドは常にGETですか?

URL url = new URL(serverAddr); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setDoOutput(true); 
urlConnection.setRequestMethod(verb); 
urlConnection.setFixedLengthStreamingMode(postBody.getBytes().length); 
//urlConnection.setRequestProperty("Content-Length", postBody.getBytes().toString()); 
urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 

urlConnection.connect(); 

OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream()); 
out.write(postBody.getBytes()); 
out.flush(); 

int responseCode = urlConnection.getResponseCode(); 
System.out.println("HTTPS RESPONSE CODE: " + responseCode); 

out.close(); 

EDITは:これはバグに持っている...デバッガが、私はこれをtrueに設定していても、明らかに偽setDoOuputメンバ変数を示しています。それは設定されていません!

+0

'verb'は何ですか?実際にPOSTではなくGETリクエストが行われていることを確認しましたか? – dylan7

+0

動詞が値 "POST"で渡されています。これをどのように確認できますか?応答コードは400を返していますが、それが悪いGET要求か悪いPOST要求かどうかはわかりません。 – ShrimpCrackers

+0

次のURL URL =新しいURL(アドレス)を試してください。 urlConnection =(HttpURLConnection)url.openConnection(); urlConnection.setDoOutput(true); urlConnection.setRequestProperty( "Content-Type"、...); OutputStream outputStream =新しいBufferedOutputStream(URLConnection.getOutputStream()); BufferedWriter writer =新しいBufferedWriter(新しいOutputStreamWriter(出力ストリーム、 "utf-8")); writer.write(requestBody); writer.flush(); writer.close(); outputStream.close(); ' – BNK

答えて

0

POST動詞を使用してデータを送信する場合は、urlConnection.setDoInput(true);を使用する必要があります。

http://developer.android.com/reference/java/net/URLConnection.html#setDoInput(boolean)

接続が確立される前にそれを設定する必要があります。

+0

動作しません。ドキュメントでは、「データをWebサーバーにアップロードするには、setDoOutput(true)を使用して接続を構成します。」 – ShrimpCrackers

+0

ドキュメントごとに、デフォルトでtrueに設定されています –

0

これは私の作業例です:

url = new URL(requestURL); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setReadTimeout(15000); 
    conn.setConnectTimeout(15000); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 


    OutputStream os = conn.getOutputStream(); 
    BufferedWriter writer = new BufferedWriter(
      new OutputStreamWriter(os, "UTF-8")); 
    writer.write(getPostDataString(postDataParams)); 

    writer.flush(); 
    writer.close(); 
    os.close(); 
    int responseCode=conn.getResponseCode(); 
    Map<String, List<String>> mp = conn.getHeaderFields(); 

    if (responseCode == HttpsURLConnection.HTTP_OK) { 
     String line; 
     BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     while ((line=br.readLine()) != null) { 
      response+=line; 
     } 
    } 
+0

非常に奇妙な問題が発生しています。私は、デバッガを使ってsetDoOutput(true)を実行しました。メンバー変数がtrueに設定されていることがわかりますが、プログラムがそのメソッドの外側にステップすると、doOutputはまだfalseです!ここで何が起こっているのですか? – ShrimpCrackers

+0

それは非常に奇妙です。私のコードスニペットでconn呼び出しの順序を試すことができますか?まず、Requetsメソッドを設定し、入力と出力を設定します。 –

+0

ちょうど試しました。同じこと。 doOutputは常にfalseです。 setRequestMethod( "POST")を使用しても、メソッドは常に "取得"されます。 – ShrimpCrackers

関連する問題