gpt4 book ai didi

android - HttpUrlConnection.openConnection 第二次失败

转载 作者:IT老高 更新时间:2023-10-28 21:46:18 31 4
gpt4 key购买 nike

我知道这个问题应该用 System.setProperty("http.keepAlive", "false");在 openConnection 之前,但这对我不起作用。第一次尝试此代码有效,第二次失败。即使我在不​​到 5 秒后尝试这个请求,它也可以工作。如果我等待更多,它会再次失败

这是我的代码:

    System.setProperty("http.keepAlive", "false");
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();
conn.setUseCaches(false);
conn.setRequestProperty("Connection","Keep-Alive");
conn.setRequestProperty("User-Agent", useragent);
conn.setConnectTimeout (30000) ;
conn.setDoOutput(true);
conn.setDoInput(true);

consumer.sign(conn);
InputSource is = new InputSource(conn.getInputStream());

我在最后一行得到了异常:

java.io.IOException: Write error: I/O error during system call, Broken pipe
W/System.err( 2164): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativewrite(Native Method)
W/System.err( 2164): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access$600(OpenSSLSocketImpl.java:55)
W/System.err( 2164): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:583)
W/System.err( 2164): at java.io.OutputStream.write(OutputStream.java:82)
W/System.err( 2164): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.sendRequest(HttpURLConnectionImpl.java:1332)
W/System.err( 2164): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequestInternal(HttpURLConnectionImpl.java:1656)
W/System.err( 2164): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequest(HttpURLConnectionImpl.java:1649)
W/System.err( 2164): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1153)
W/System.err( 2164): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:253)

有人知道这里出了什么问题吗?谢谢!

最佳答案

HttpURLConnection 在保持连接 Activity 时使用的连接池已损坏,因此它会尝试使用已被服务器关闭的连接。默认情况下,Android 会在所有连接上设置 KeepAlive。

System.setProperty("http.keepAlive", "false"); 是一种解决方法,它为所有连接禁用 KeepAlive,这样您就可以避免连接池中的错误。

conn.setRequestProperty("Connection","Keep-Alive"); 为这个特定的连接开启 KeepAlive,本质上颠倒了 System.setProperty("http.keepAlive", "false"); 确实如此。

此外,我总是明确地调用 connect(),因为它可以清楚地表明您在哪里结束连接设置。我不确定调用此方法是否可选。

System.setProperty("http.keepAlive", "false");
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();
conn.setUseCaches(false);
conn.setRequestProperty("User-Agent", useragent);
conn.setConnectTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
consumer.sign(conn);

conn.connect();

InputSource is = new InputSource(conn.getInputStream());

关于android - HttpUrlConnection.openConnection 第二次失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352424/

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