Этот код должен ожидать завершения ответа.Вызов con.getResponseCode()
не вернется (не может!), Пока сервер не ответит хотя бы заголовком ответа HTTP, содержащим код ответа.
Возможно, сервер отправляет заголовок ответа HTTP до того, какзакончил чтение данных, которые разместил клиент.Это было бы ошибкой.(Если сервер отправляет ответ слишком рано, он не может правильно установить код ответа!)
Возможно также, что ответ сервера не является ответом 2xx, и на сервере имеются сообщения об ошибках / диагностикапоток ошибок, а не входной поток.(Прочитайте javadocs на getInputStream
против getErrorStream
.)
Таким образом, наиболее вероятная причина, по которой не блокируется в течение ~ 20 секунд, заключается в том, что запрос не выполнен ... и об этом не сообщается должным образом,из-за проблем с реализацией на стороне сервера или на стороне клиента.
ОБНОВЛЕНИЕ - Оказывается, что реальная проблема заключалась в том, что на некоторых платформах "завиток" вел себя странно, вероятно из-за сетипроблемы с конфигурацией.