Wpis z mikrobloga

Nie jestem sobie w stanie z tym poradzić. Za pomocą HttpURLConnection robie request. Dokładnie ten sam endpoint co zawsze. Z jednym JSONem via POST działa, za drugim razem nieco inne argumenty i nie działa. To jest wręcz nieprawdopodobne i czarodziejskie. Stackoverflow nie pomaga. #androiddev #java #programowanie

Caused by: java.io.EOFException: \n not found: size=0 content=...
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:201)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127) 
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737) 
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407) 
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538) 
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105) 
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26) 
  • 14
@Myzreal:

HttpURLConnection con = null;
try {
URL url = new URL(BuildConfig.API_URL);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setConnectTimeout(SEND_TIMEOUT);
con.setReadTimeout(SEND_TIMEOUT);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
try (OutputStream os = con.getOutputStream()) {
os.write(json[0].toString().getBytes(StandardCharsets.UTF_8));
if (con.getResponseCode() == 200) {
// Exception leci tutaj. Request się wykonał poprawnie!
}
}
} catch (Exception e) {
Log.e(TAG, "Request had exception", e);
} finally {
if (con != null)
con.disconnect();
}
@indywidualny: a to nie jest jakaś pochodna tego bug'a może:
https://github.com/square/okhttp/issues/1517

Poza ustawieniem keepalive też są jakieś ustawienia keepalive dla stosu tcpip linux'owego
server jest na docker ?
https://forums.docker.com/t/setting-tcp-keepalive-time-param-for-containers/41496/2

ogólnie, problem keepalive objawiłby Ci się na długich połączeniach i przetwarzaniach Twojego request'a.
Jeżeli Twój regest wykonuje się praktycznie od razu to ja bym tam problemu nie szukał.

uruchom tcpdump'a na serwerze i zobacz co się dzieje w komunikacji sieciowej.
np.
tcpdump