gpt4 book ai didi

java - 仅使用 Socket 类在 Java 中编写 HTTP 代理

转载 作者:行者123 更新时间:2023-12-02 07:59:44 26 4
gpt4 key购买 nike

我正在尝试仅使用 Socket 类在 Java 中编写 HTTP 代理。我之前曾尝试构建一个,并且通过写入套接字的输出流成功发送了请求,但我很难读取响应。我进行的研究表明我应该使用输入流并逐行读取它,但我无法使用这种方法成功读取任何网页。有人对我从这里可以去哪里有任何建议吗?

我的代码实际上使用字节缓冲区从输入流中读取,以便以字节为单位读取页面:

    InputStream input = clientSocket.getInputStream()
byte[] buffer = new byte[48*1024];
byte[] redData;
StringBuilder clientData = new StringBuilder();
String redDataText;
int red;
while((red = input.read(buffer)) > -1) {
redData = new byte[red];
System.arraycopy(buffer, 0, redData, 0, red);
redDataText = new String(redData, "UTF-8");
System.out.println("Got message!! " + redDataText);
clientData.append(redDataText);
}

最佳答案

如果您正在寻求一种按行读取输入流的方法,这个可能会为您服务:

    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(input, "UTF-8"));
String line;
StringBuilder clientData=new StringBuilder();
while ((line=bufferedReader.readLine()) != null)
{
clientData.append(line);
}

您必须小心,不要以这种方式读取 InputStream,除非您事先确定它仅包含纯文本(而不是二进制数据)。

顺便说一句:为了提高效率,我建议您根据最终大小预先调整 clientData 的初始大小(如果没有,它将从默认大小 10 开始,并且需要重新调整大小更多次数)。

关于java - 仅使用 Socket 类在 Java 中编写 HTTP 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34348170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com