how to implement a HTTP server hosted on Androidの例が見つかりました。 HTTP GETメソッドで正常に動作します。Android上でホストされているHTTPサーバーでPOSTデータを取得する
ここSocket
のInputStream
を読み取り、そのOutputStream
に書き込むコードです:例えば
private class HttpResponseThread extends Thread {
Socket socket;
String h1;
HttpResponseThread(Socket socket, String msg) {
this.socket = socket;
h1 = msg;
}
@Override
public void run() {
BufferedReader br;
PrintWriter pw;
String request;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
request = br.readLine();
pw = new PrintWriter(socket.getOutputStream(), true);
String response =
"<html><head></head>" +
"<body>" +
"<h1>" + h1 + "</h1>" +
"</body></html>";
pw.print("HTTP/1.0 200" + "\r\n");
pw.print("Content type: text/html" + "\r\n");
pw.print("Content length: " + response.length() + "\r\n");
pw.print("\r\n");
pw.print(response + "\r\n");
pw.flush();
msgLog += String.format("Request of %s from %s\n", request, socket.getInetAddress().toString());
socket.close();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
infoMsg.setText(msgLog);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
は、URL <android_device_ip>:<server_port>?foo=bar
と、出力は次のとおりです。?/ fooというの
リクエスト= bar from "client_ip"
ここで私は簡単にGETデータを取得できます(foo=bar
)。しかし、HTTP GETメソッドを使用する代わりに、HTTP POSTメソッドを使用したいと思います...
しかし、私はそれを行う方法は見当たりません。
PS:その他のコードの詳細については、hereを参照してください。
とメッセージのペイロード部分が格納されない:この部分はの形でHTTP POSTデータでありますかsocket.getInputStream()で? – Drarig29
@ Drarig29はい、すべての入力ストリームを読んで、それを '" \ r \ n \ r \ n "'で分割します。 –
"split"はおそらく正しい単語ではありません。リクエストヘッダーを終了するには '\ r \ n \ r \ n" 'が見つかるまで' InputStream'から読み込む必要があります。次に、ヘッダーを解析して、1)本文が送信されている場合、2)エンコードされている場合、3)終了している場合を認識する必要があります。それでは、あなたは 'InputStream'から本文データを読むことができます(詳細については、[RFC 2616セクション4.4メッセージ長](https://tools.ietf.org/html/rfc2616#section-4.4)を参照してください) 'Content-Type'リクエストヘッダ(' application/x-www-form-urlencoded'、 'multipart/form-data'など)で指定された型に基づいています。 –