Пул соединений, используемый HttpURLConnection
, когда он поддерживает живые соединения, разрывается, так что он пытается использовать соединения, которые были закрыты сервером.По умолчанию 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());