使用Java套接字获取请求

使用Java套接字获取请求,java,sockets,http,get,Java,Sockets,Http,Get,我正在编写一个简单的程序,向特定的url“”发送get请求。如果我将请求发送到“”,则请求有效,但我需要将其发送到“关于”页面 package badunetworks; import java.io.*; import java.net.*; public class GetRequest { public static void main(String[] args) throws Exception { GetRequest getReq = new Get

我正在编写一个简单的程序,向特定的url“”发送get请求。如果我将请求发送到“”,则请求有效,但我需要将其发送到“关于”页面

package badunetworks;
import java.io.*;
import java.net.*;

public class GetRequest {


    public static void main(String[] args) throws Exception {

        GetRequest getReq = new GetRequest();

        //Runs SendReq passing in the url and port from the command line
        getReq.SendReq("www.badunetworks.com/about/", 80);


    }

    public void SendReq(String url, int port) throws Exception {

        //Instantiate a new socket
        Socket s = new Socket("www.badunetworks.com/about/", port);

        //Instantiates a new PrintWriter passing in the sockets output stream
        PrintWriter wtr = new PrintWriter(s.getOutputStream());

        //Prints the request string to the output stream
        wtr.println("GET / HTTP/1.1");
        wtr.println("Host: www.badunetworks.com");
        wtr.println("");
        wtr.flush();

        //Creates a BufferedReader that contains the server response
        BufferedReader bufRead = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String outStr;

        //Prints each line of the response 
        while((outStr = bufRead.readLine()) != null){
            System.out.println(outStr);
        }


        //Closes out buffer and writer
        bufRead.close();
        wtr.close();

    }

}

您需要打开无路径url的套接字,例如

Socket("www.badunetworks.com", port);
在send命令GET/{path}HTTP/1.1之后,例如

GET /about HTTP/1.1

。。。其他标题…

如果about页面链接是about.html,则必须将此行
wtr.println(“GET/HTTP/1.1”)
更改为
wtr.println(“GET/about.html HTTP/1.1”)。

在套接字创建中,删除/about


wtr.println(“GET/HTTP/1.1”)-->此行调用指定主机的主页。

当您对Web服务器进行这种低级访问时,您应该了解。套接字位于第5层,HTTP位于第7层。这也是为什么只接受主机名或InetAddr而不接受URL的原因。 要使用套接字,您必须正确地实现HTTP协议,即

  • 创建到主机和端口的套接字连接,即
    www.badunetworks.com
    80
  • 将HTTP数据包发送到outputstream,其中包含方法、资源(按路径和协议版本),即
    GET/about/HTTP/1.1
  • 正确阅读和解释响应(标题和正文)
但我想知道为什么要这么复杂,除了自己实现低级http客户机,还有很多替代方案:

  • 尽管它的处理方法已经过时,但它仍然是读取资源的最简单方法之一,只需调用
    openStream()
    即可读取它
  • 是java中使用最广泛的http客户端实现之一,它非常容易使用,并且比通过URL读取更灵活
  • 具有用于创建web客户端的良好构建器api

您是否有任何错误输出?巴都网络公司正在招聘一名java编程实习生,申请该职位时您必须做的一件事就是完成编程挑战。挑战在于仅使用java套接字编程来执行GET请求。我做了所有建议的更改,现在似乎可以工作了。然而,我得到了一个404响应代码,这很奇怪,因为当我在浏览器中键入它时,路径会起作用。有什么想法吗?