Java 使用http POST请求创建并登录网站,而不使用HttpUrlConnection库或其他库

Java 使用http POST请求创建并登录网站,而不使用HttpUrlConnection库或其他库,java,post,logging,request,httpurlconnection,Java,Post,Logging,Request,Httpurlconnection,我试图创建http post请求,而不使用java中的任何库,如java.net.HttpUrlConnection、java.net.URLConnection、URL.openConnection()等。但互联网上的每一个例子都使用了诸如HttpUrlConnection之类的库。有人能帮我创建一个用java登录网站的Post请求吗?您需要使用低级网络直接处理对象。也许最好从中开始,然后查看其中的示例echo客户端。这将向您展示如何连接到服务器,然后向服务器读写数据 为了构建所需的消息,您还

我试图创建http post请求,而不使用java中的任何库,如java.net.HttpUrlConnection、java.net.URLConnection、URL.openConnection()等。但互联网上的每一个例子都使用了诸如HttpUrlConnection之类的库。有人能帮我创建一个用java登录网站的Post请求吗?

您需要使用低级网络直接处理对象。也许最好从中开始,然后查看其中的示例echo客户端。这将向您展示如何连接到服务器,然后向服务器读写数据

为了构建所需的消息,您还需要理解。这个话题太详细了,无法在这里讨论,所以你需要读一些书

下面是一个程序,它向运行在localhost:1234上的服务器发送一个简单的硬编码POST请求:

import java.io.*;
import java.net.*;

public class SendPost {
    public static void main(String[] args) {
        try {
            String post_request = "POST /login HTTP/1.1\r\nHost: localhost:1234\r\nContent-Length: 41\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nusername=bob%40test.com&password=i+forget";

            Socket s = new Socket("localhost", 1234);
            DataOutputStream out = new DataOutputStream(s.getOutputStream());           
            out.writeBytes(post_request);          
            s.close();
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}
这只是发送一个包含用户名和密码的POST请求,其格式与浏览器提交登录表单时的格式相同

(高度简化的)请求如下所示:

POST /login HTTP/1.1 Host: localhost:1234 Content-Length: 41 Content-Type: application/x-www-form-urlencoded username=bob%40test.com&password=i+forget POST/login HTTP/1.1 主机:localhost:1234 内容长度:41 内容类型:application/x-www-form-urlencoded username=bob%40test.com&password=i+forget
这个图书馆有什么问题?我敢肯定,其他所有库都会在内部包装它,因为没有人希望通过测试流实现TCP/IP连接的读取和解析。你确定你真的想这么做吗?你好,欢迎来到Stackoverflow!你可能会想的,还有。对于你的问题,一个简单的谷歌搜索产生了Hi@Zilvinas,这是一个项目,我们不能使用HttpUrlConnection。我知道这是一个非常有用的图书馆。但是我们需要从头开始创建我们的请求。嗨@Turing85,我希望你也能赢得图灵奖!JFYI,我搜索了这么多,但在您提到的链接中,这使用了servlet库。我不想使用任何库。Spring
RestTemplate
怎么样?非常感谢@mhawke。这是一个非常好的示例,我想我可以在阅读HTTP POST请求结构后第一次尝试使用它。你能让我知道你的用户名和密码值是多少吗?我看到nusername=bob%40test.com&password=I+forget,但您的用户名是bob%40test.com还是bob?对不起,由于我想在我的登录页面上进行测试,我需要知道在我的请求中使用用户名和密码的确切格式。用户名是
bob@test.com
,密码是
我忘了
。这些说明在处理HTTP时并不总是简单的。这些值中的每一个都经过“url编码”(AKA),以便对非ascii字符或其他可能具有特殊含义的字符进行百分比编码,以避免误解。在这种情况下,
@
已替换为
%40
,空格替换为
+
。谢谢,那么我如何才能找到在参数中使用哪些字符而不是&?我的密码和用户名没有任何空格,但我认为在用户名和密码之间,我需要使用&。我使用了你的例子,我得到了UnknownHostException。我想登录这个网站:你能检查一下我的登录表,让我知道我需要在我的post请求中发布多少以及哪些参数吗?我正在使用这个请求:String post_request=“post HTTP/1.1\r\nHost:\r\n内容长度:41\r\n内容类型:application/x-www-form-urlencoded\r\n\r\nusername=1111&password=222&csrfmiddlewaretoken=TLa4KsHW8T18FTJxn1zJZzsypLDrULgZ”;