繁体   English   中英

Java HTTP请求客户端示例

[英]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”是否不正确,还是这里有其他错误? 我想使用说明表格,而不是其他解决方案。 谢谢! (我不太会英语)

  • HTTP“行尾标记”为CR LF或\\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM