gpt4 book ai didi

Java URLConnection 适用于 windows,但不适用于 linux

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:48 25 4
gpt4 key购买 nike

在我的 java 程序中,我使用 URLConnection 来获取 url。它在 windows 下工作正常,但在 linux 下它不起作用。我想知道为什么。

代码:

Properties prop = System.getProperties();
prop.setProperty("http.proxyHost", "127.0.0.1");
prop.setProperty("http.proxyPort", "8080");
System.setProperty("sun.net.client.defaultConnectTimeout", "20000");
System.setProperty("sun.net.client.defaultReadTimeout", "20000");
URLConnection conn = new URL(url).openConnection();
InputStream is = conn.getInputStream();
byte [] buff = new byte[is.available()];//1024];
int read = is.read(buff);
System.out.println("buff:" + buff.length);
String result = "";
if(read > 0) {
result = new String(buff, 0, read);
read = is.read(buff);
System.out.println("result:" + result);
}

原来byte是空的,read=0。

但在 windows 下它工作正常。

我也试过设置 User-Agent 字段,这没什么不同。

HttpURLConnection 也试过了,同样的问题。

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080));
HttpURLConnection conn = (HttpURLConnection)(new URL(url).openConnection(proxy));

这种方式也试过了,还是失败了。

所有这些方式都适用于 Windows。

该 url 可以在这台电脑上使用相同的代理通过 firefox 正常打开,顺便说一句。

最佳答案

available() 的 javadoc 中方法,它说:

Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream.

关键是“不阻塞”。该方法不会返回预期为您尝试读取的 url 的内容长度的字节数。使用固定大小的缓冲区应该可以解决您的问题,而不是可能返回 0 的 InputStream.available()。

关于Java URLConnection 适用于 windows,但不适用于 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629475/

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