Чтение данных POST с формы HTML, отправленной в serversocket

я пытаюсь записать самое простое приложение для сервера в Java, отображая форму HTML с входом текстовой области, который после представления дает мне возможность проанализировать xml, введенный в той текстовой области. На данный момент я создаю базирующийся сервер простого serversocket как этот:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class WebServer {

  protected void start() {
    ServerSocket s;
    String gets = "";
    System.out.println("Start on port 80");
    try {
      // create the main server socket
      s = new ServerSocket(80);
    } catch (Exception e) {
      System.out.println("Error: " + e);
      return;
    }

    System.out.println("Waiting for connection");
    for (;;) {
      try {
        // wait for a connection
        Socket remote = s.accept();
        // remote is now the connected socket
        System.out.println("Connection, sending data.");
        BufferedReader in = new BufferedReader(new InputStreamReader(
            remote.getInputStream()));
        PrintWriter out = new PrintWriter(remote.getOutputStream());

        String str = ".";

        while (!str.equals("")) {
          str = in.readLine();
          if (str.contains("GET")){
            gets = str;
            break;
          }
        }

        out.println("HTTP/1.0 200 OK");
        out.println("Content-Type: text/html");
        out.println("");
        // Send the HTML page
        String method = "get";
        out.print("<html><form method="+method+">");
        out.print("<textarea name=we></textarea></br>");
        out.print("<input type=text name=a><input type=submit></form></html>");
        out.println(gets);
        out.flush();

        remote.close();
      } catch (Exception e) {
        System.out.println("Error: " + e);
      }
    }
  }

  public static void main(String args[]) {
    WebServer ws = new WebServer();
    ws.start();
  }
}

После того, как форма (текстовая область с xml и одним дополнительным вводом текста) отправлена в, 'получает' переменную Строкового типа, у меня есть значения Urlencoded моих переменных (также отображенный на экране, похоже что:

gets = GET /?we=%3Cnetwork+ip_addr%3D%2210.0.0.0%2F8%22+save_ip%3D%22true%22%3E%0D%0A%3Csubnet+interf_used%3D%22200%22+name%3D%22lan1%22+%2F%3E%0D%0A%3Csubnet+interf_used%3D%22254%22+name%3D%22lan2%22+%2F%3E%0D%0A%3C%2Fnetwork%3E&a=fooBar HTTP/1.1 

Что может я делать для изменения, ДОБИРАЮТСЯ до метода POST (если я просто изменяю его в форме и, чем помещенный, "если (str.contains ("POST")) {" он дает мне строку как

gets = POST / HTTP/1.1

без переменных. И после этого, как я могу использовать xml от своего поля текстовой области (позвонил 'нам')?

7
задан skaffman 13 June 2010 в 21:34
поделиться

2 ответа

Типичный запрос HTTP POST выглядит следующим образом:

POST / HTTP/1.1
Host: www.example.com
Accept: text/html,*/*;q=0.5
User-Agent: BrowserName/1.0
Referer: http://www.example.com/
Content-type: application/x-www-form-urlencoded; charset=utf-8

foo=1&bar=2

Первая строка содержит метод (обычно GET или POST, но есть и другие, например HEAD, PUT, DELETE), URI запроса и версию протокола. Затем есть ряд заголовков запросов, которые могут быть не так важны для простого сервера. Если метод принимает тело запроса (POST и PUT), то после заголовков идет пустая строка, за которой следует тело запроса. В случае POST из HTML-формы тело будет состоять из пар ключ = значение для всех элементов формы, соединенных парами и . Значения будут закодированы в%.

Вам просто нужно правильно проанализировать весь запрос.

Вы должны знать, что окончания строк в HTTP должны быть в стиле Windows ( \ r \ n ). Метод readline () может интерпретировать это как два разрыва строки, поэтому может показаться, что между каждой реальной строкой есть пустая строка.

5
ответ дан 6 December 2019 в 05:42
поделиться

Данные POST не находятся в первой строке. Распечатайте все строки, и вы увидите. На самом деле это сразу после пустой строки.

3
ответ дан 6 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: