java - 通过 TCP 连接向 "localhost"发送 HTTPGET 请求

标签 java sockets http tcp

这是我的java http服务器程序:

package alan;

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

public class SimpleHTTPServer { 
    public static void main(String args[] ) throws IOException { 
        ServerSocket server = new ServerSocket(8080); 
        System.out.println("Listening for connection on port 8080 ...."); 
        while (true) { 
            Socket clientSocket = server.accept(); 
            InputStreamReader isr = new          InputStreamReader(clientSocket.getInputStream()); 
        BufferedReader reader = new BufferedReader(isr); 
        String line = reader.readLine(); 
        while (!line.isEmpty()) { 
            System.out.println(line); 
            line = reader.readLine(); 
        } 
    } 
} 
}

当这个程序运行时,如果我在 Web 浏览器上写“http://localhost:8080 ”,该程序可以处理 Http get 请求,并将结果打印在 Eclipse 控制台上,但我想使用 java 代码来完成。

实际上,首先,我想创建一个名为 SimpleHTTPClient 的类,我想创建一个与 SimpleHTTPServer 类的 TCP 套接字连接,并通过 java 代码将 HTTPGET 请求发送到我的本地主机。我怎样才能做到这一点?实际上,我可以像这样使用 URL 连接发送 HTTPGET 请求:

package alan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;

public class SimpleHTTPClient {
    static Socket socket = null;

    public static void main(String args[]) throws UnknownHostException,     IOException {
    URL oracle = new URL("http://localhost:8080");
    URLConnection yc = oracle.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);
    in.close();
}
}

但我想通过 TCP 套接字连接将 HTTPGET 请求发送到我的 localhost。我怎样才能做到这一点?

最佳答案

为此,您必须打印请求 header 。 对于基本的 HTTP 请求,只需在 header 中添加 http 方法和主机即可。

看下面的代码

Socket s = new Socket(InetAddress.getByName("stackoverflow.com"), 80);
PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("GET / HTTP/1.1");
pw.println("Host: stackoverflow.com");
pw.println("");
pw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while ((t = br.readLine()) != null) {
    System.out.println(t);
}
br.close();

祝你好运

关于java - 通过 TCP 连接向 "localhost"发送 HTTPGET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088000/

相关文章:

linux - 事件套接字的 '{tcp_error, Socket, etimedout}' 消息从何而来?

.net - 在 .NET 中检测客户端断开连接的最佳实践?

http - 如何处理同名的多个cookie?

java - 如何根据条件更改 HttpServlet 的服务器/主机

java - 将数组中的元素连接到字符串

java - 如何知道 UI 是否空闲了 X 时间?

c - 向字符串添加 header 并使用 TCP 套接字发送

amazon-web-services - 如何在 AWS Application Load Balancer 中限制文件上传大小?

java - 如何增加jvm内存

java - 我的代码在 for 循环 "java.util.InputMismatchException"中输入字符串时显示错误?