- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我知道这个问题应该用 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/
1) 如何在 url.openConnection() 时发送特定的请求 header ? 2)另外,我怎样才能将请求转换为 POST 并发送 post 数据? 3) 您会推荐什么文档来进一步了解 u
我无法从我的 ubuntu 14.04 系统通过 openconnect VPN 客户端进行连接。我曾经在 1 个月前连接到这个 VPN,从那时起我就没有对 VPN 客户端设置进行任何更改。 这是我在
我正在尝试使用以下代码从 URL 下载 Web 内容: URL content = new URL(urlstr); HttpURLConnection urlConnection = (Ht
为什么我不能在一个方法中调用两次 OpenConnection()?当我调用它时出现此错误: The connection is already open. 我在SelectDisPatient()中
您好,我正在尝试深入学习 JAVA,因此我正在深入研究 JDK 源代码中的以下几行: URL url = new URL("http://www.google.com"); URLConnection
我正在构建一个应用程序,它在单独的线程中调用对 REST API 的 API 请求。该应用程序在调用后仍然挂起 - 没有抛出异常。 我尝试了很多方法从我的 Java 应用程序发出 GET 请求,但没有
我有以下java函数来检查网站响应代码: URL u = null; try { u = new URL("http://bforball.com"); HttpURLConnec
我一直在关注有关如何从 Android 应用程序将数据插入数据库的在线教程,并且除了这一小部分之外一切都正常 List params = new ArrayList<>(); params.add(n
是否可以重命名 openconnection()? 原文: URL url = new URL("http://google.co.in"); URLConnection connection = u
我有这个脚本: #!bin/bash NAME="user" PIDFILE="openconnect.pid" CERT="user.crt" KEY="user.key" PASS="pass"
我有一个缩短的网址。现在我使用 HttpUrlConnection 打开带有缩短链接的连接。 URL url = new URL(myshortened url); 现在我通过调用打开连接: Http
我想知道当 URL.openconnection() 时做了什么。 我做了一些这样的测试: public static void main(String[] args) { // tes
我正在使用 Scala 开发网站抓取应用程序。我正在抓取的网站在很大程度上是面向 session 的,因此我必须先访问该网站一次以获取 session ID,然后才能执行其他任何操作。 我像这样获取用
由于 Android 从 6.0 版开始从他们的 SDK 中删除了 apache web 客户端,而且我不希望在我的 apk 中包含该库,我正在迁移到 HttpURLConnection 方法。 为了
我知道这个问题应该用 System.setProperty("http.keepAlive", "false");在 openConnection 之前,但这对我不起作用。第一次尝试此代码有效,第二次
我正在编写一个使用蓝牙的 Cocoa 应用程序。我正在尝试连接到蓝牙设备,但失败。 IOBluetoothDevice *btDevice; // I do search and find the d
我不明白为什么抽象类可以转换为它的任何子类。例如: URL url = new URL("http://www.google.com"); HttpURLConnection httpURL = (H
我正在努力实现以下目标: ./vpnconnect.sh start 应该建立到服务器的 VPN 连接。 ./vpnconnect.sh stop 应该终止 VPN 连接。 这是未按预期工作的尝试 s
众所周知,这两个代码会产生相同的结果 public class MainApp { public static void main(String[] args) throws IOExcept
我一直在关注有关如何将数据从 android 应用程序插入到数据库中的在线教程,并且除了这个小部分之外,一切正常 List params = new ArrayList<>(); params.add
我是一名优秀的程序员,十分优秀!