使用Java套接字获取请求
我正在编写一个简单的程序,向特定的url“”发送get请求。如果我将请求发送到“”,则请求有效,但我需要将其发送到“关于”页面使用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
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响应代码,这很奇怪,因为当我在浏览器中键入它时,路径会起作用。有什么想法吗?