2012-03-08 39 views
18

HttpURLConnectionを使用したJSONデータの投稿方法私はこれをしようとしています:cURLとHttpURLConnection - JSONデータの投稿

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

StringReader reader = new StringReader("{'value': 7.5}"); 
OutputStream os = httpcon.getOutputStream(); 

char[] buffer = new char[4096]; 
int bytes_read;  
while((bytes_read = reader.read(buffer)) != -1) { 
    os.write(buffer, 0, bytes_read);// I am getting compilation error here 
} 
os.close(); 

私はラインでのコンパイルエラー14.

を取得cURLの要求があるのです:

curl -H "Accept: application/json" \ 
-H "Content-Type: application/json" \ 
-d "{'value': 7.5}" \ 
"a URL" 

これはcURLの要求を処理するための方法は何ですか?どんな情報であれ私にとってとても役に立ちます。

ありがとうございました。

+0

コンパイルエラー – ykaganovich

答えて

30

OutputStreamはバイトで動作することを想定しており、それに文字を渡しています。これを試してみてください:

HttpURLConnection httpcon = (HttpURLConnection) ((new URL("a url").openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect(); 

byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8"); 
OutputStream os = httpcon.getOutputStream(); 
os.write(outputBytes); 

os.close(); 
+0

このように複雑なJSONオブジェクトを送信することはできませんか?たとえば、... "{"ポイント ":[{"ポイント ":{"緯度 ":40.8195085182092"経度 ":73.75127574479318}"説明 ":"テスト "}、{"ポイント "緯度: "40.2195085182092、"経度 ": - 74.75127574479318}、"説明 ":"テスト2 "}]、"モード ":"ウォーキング "}" ...私はこの方法で送信しているオブジェクトです。 HTTPレスポンスコード500を取得してください。 – crowmagnumb

+0

@CrowMagnumb別の質問を投稿する必要があります。 500は、サーバーが要求を処理しようとする際に内部エラーが発生したことを意味します。 – ykaganovich

+0

OK、私はこれを行った[ここ](http://stackoverflow.com/questions/20452366/http-response-code-500-sending-complex-json-object-using-httpurlconnection)提案していただきありがとうございます。 – crowmagnumb

8

あなたはのOutputStreamWriterクラスを使用することをお勧めします。

final String toWriteOut = "{'value': 7.5}"; 
final OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream()); 
osw.write(toWriteOut); 
osw.close(); 
+0

'OutputStream'のメリットは? – Darpan

関連する問題