代码之家  ›  专栏  ›  技术社区  ›  Jason Sperske

如何使用Socket类在Java中执行HTTP1.1 Post?

  •  1
  • Jason Sperske  · 技术社区  · 17 年前

    String host = "sub.example.com";
    int port = 80;
    String path = "/Servlet";
    StringBuilder data = new StringBuilder();
    data.append(URLEncoder.encode("NameA", "UTF-8")).append('=').append(URLEncoder.encode("ValueA", "UTF-8"));
    data.append('&').append(URLEncoder.encode("NameB", "UTF-8")).append('=').append(URLEncoder.encode("NameB", "UTF-8"));
    
    InetAddress addr = InetAddress.getByName(host);
    Socket socket = new Socket(addr, port);
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
    
    wr.write("POST "+path+" HTTP/1.0\r\n");
    wr.write("Content-Length: "+data.length()+"\r\n");
    wr.write("Content-Type: application/x-www-form-urlencoded\r\n");
    wr.write("\r\n");
    // Send data
    wr.write(data.toString());
    wr.flush();
    wr.close();
    

    有什么想法吗?

    2 回复  |  直到 17 年前
        1
  •  6
  •   Steve Kuo    17 年前

    您可能想考虑使用 Apache HttpClient 而不是执行原始套接字通信。

        2
  •  4
  •   Rob    17 年前

    HttpURLConnection . 您仍然需要处理构建 multipart/form-encoded 请求主体,但它将构造格式良好的请求的许多麻烦抽象出来,并使您的代码更接近真正的域。