[英]Java http request client example
我是计算机网络的新手,我有一个关于创建java http客户端示例的练习。
练习说明:
Socket soc = new Socket(host, port);
DataInputStream in = new DataInputStream(soc.getInputStream());
BufferedWriter out= new BufferedWriter(new
OutputStreamWriter(soc.getOutputStream()));
out.write(httpRequest);
out.flush();
String httpResponse= in.readUTF();
这是我的代码:
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class MyTest{
public static void main(String[] args) throws UnknownHostException, IOException{
String host = "gg.gg";
String httpRequest = "GET / HTTP/1.1 Host:gg.gg ";
int port = 80;
Socket soc = new Socket(host, port);
DataInputStream in = new DataInputStream(soc.getInputStream());
BufferedWriter out= new BufferedWriter(new
OutputStreamWriter(soc.getOutputStream()));
out.write(httpRequest);
out.flush();
String httpResponse = in.readUTF();
System.out.println(httpResponse);
//soc.close();
}
}
但是当我运行该程序时,它运行了很长时间,并且我发现这是readUTF()方法。 它运行约20秒钟,然后显示以下消息:
我的请求“ GET / HTTP / 1.1 Host:gg.gg”是否不正确,还是这里有其他错误? 我想使用说明表格,而不是其他解决方案。 谢谢! (我不太会英语)
\\r\\n
。 Simple-Request = "GET" SP Request-URI CRLF
你应该做:
String httpRequest = "GET /\r\n";
另外, in.readUTF()
使用'修饰的UTF-8'而不是您想要的,因为它期望将字符串的大小指定为前2个字节。
虽然效率不高 ,但可以:
int read;
while ((read = in.read()) != -1)
{
System.out.print((char) read);
}
(这忽略了响应实际上是的编码,但是恰好返回为UTF-8,这对于使用(char)
进行强制转换非常好。正确的编码处理超出了此答案的范围。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.