Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用套接字使用java获取网页_Java_Http_Sockets - Fatal编程技术网

使用套接字使用java获取网页

使用套接字使用java获取网页,java,http,sockets,Java,Http,Sockets,我想获取一个网页,只是获取数据,而不是解析或呈现任何内容,只是捕获http请求后返回的数据 我正试图使用JavaRuntime库的高级类套接字来实现这一点 我想知道这是否可能,因为我不太容易弄清楚用于这种两点通信的底层,或者我不知道问题是否来自我自己的系统 下面是我的代码所做的: 1设置插座 this.socket = new Socket( "www.example.com", 80 ); 2设置用于此通信的适当流 this.out = new PrintWriter( socket.ge

我想获取一个网页,只是获取数据,而不是解析或呈现任何内容,只是捕获http请求后返回的数据

我正试图使用JavaRuntime库的高级类套接字来实现这一点

我想知道这是否可能,因为我不太容易弄清楚用于这种两点通信的底层,或者我不知道问题是否来自我自己的系统

下面是我的代码所做的:

1设置插座

this.socket = new Socket( "www.example.com", 80 );
2设置用于此通信的适当流

this.out = new PrintWriter( socket.getOutputStream(), true);
this.in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
3请求页面,我不确定这样做是否合适

String query = "";
query += "GET / HTTP/1.1\r\n";
query += "Host: www.example.com\r\n";
...
query += "\r\n";

this.out.print(query);
在我的情况下,没有阅读结果

System.out.print( this.in.readLine() );

5关闭套接字和流。

是的,这是可能的。你只需要弄清楚协议。你很接近


我将创建一个简单的服务器套接字,打印出它所得到的内容。然后,您可以使用浏览器使用url连接到套接字,如:。然后使用客户端套接字模拟浏览器中的HTTP协议。

不确定为什么要低于URLConnection-它的设计目的是做您想做的事情:


Sockets上的接口甚至说:url和URLConnections为访问Internet上的资源提供了一种相对高级的机制。有时,您的程序需要较低级别的网络通信,例如,当您想要编写客户机-服务器应用程序时。由于您的访问级别不低于HTTP,我不确定使用套接字的意义何在。

如果您使用的是*nix系统,请查看,它允许您使用命令行从internet检索信息。比Java套接字连接更轻量级

如果您想使用Java,并且只是从网页检索信息,请查看Java URL库。一些示例Java代码:

URL ur = new URL("www.google.com");
URLConnection conn = ur.openConnection();
InputStream is = conn.getInputStream();
String foo = new Scanner(is).useDelimiter("\\A").next();
System.out.println(foo);

这将获取指定的URL,在本例中获取数据html并将其输出到控制台。可能需要调整分隔符abit,但这将适用于大多数发送数据的网络端点

您的代码看起来非常接近。您的GET请求可能在某些方面存在错误。尝试以下操作:打开telnet客户端并连接到web服务器。粘贴GET请求,因为您认为它应该有效。看看有没有什么回报。如果没有,则表示GET请求有问题。要做到这一点,最简单的方法是编写一个程序,该程序在套接字上侦听的内容或多或少与您正在执行的操作相反,并将web浏览器指向localhost:[正确的端口],然后查看web浏览器发送给您的内容。将其用作GET请求的模板


或者,您可以尝试将它从HTTP规范中拼凑起来

我必须将完整的URL添加到GET参数中。让它工作。虽然我看到你也可以指定主机,如果你想的话

Socket socket = new Socket("youtube.com",80); 

PrintWriter out = new PrintWriter(new BufferedWriter(new 
OutputStreamWriter(socket.getOutputStream()))); 
out.println("GET http://www.youtube.com/yts/img/favicon_48-vflVjB_Qk.png 
HTTP/1.0"); 

out.println(); 
out.flush(); 

我只想使用此程序获取web上的任何页面,因此不必创建服务器套接字来满足我的请求,不管服务器的操作系统如何,是否可以使用套接字?服务器套接字是一种了解协议isI的方法,我以前看过本教程,我只是想检查一下插座是否可以出于个人原因和实验做同样的工作,谢谢。谢谢你的推荐!我用wireshark来完成这项工作。get和http之间的额外空间是多少?你什么意思?我相信这是请求网站根目录索引的斜杠。雷加西。有没有一种方法可以做同样的事情,只是发布数据而不是get?谢谢