Трябва да извърша поредица от обаждания, използвайки една и съща връзка (okhttpclient отговаря на нуждите ми) и един от тях връща код на състоянието 204 (без тяло), но след „204 повикване“ с успех:
java.net.ProtocolException: Unexpected status line: nullHTTP/1.1 200 OK
at okhttp3.internal.http.StatusLine.parse(StatusLine.java:69)
at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184)
at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125)
at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775)
at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:86)
at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:760)
at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:613)
at okhttp3.RealCall.getResponse(RealCall.java:244)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
at okhttp3.RealCall.execute(RealCall.java:57)
at it.test.Main.main(Main.java:48)
При използване на заглавка на заявка „Връзка: затваряне“ (така че не се използва повторно връзка) проблемът не възниква.
Това е работещ основен сигнал за проблема. Той използва okHttp v3.3.0 и okio v1.8.0
public static void main(String[] args) {
try {
String url200 = "http://www.cmsservice.provahosting.it/index.php?option=com_cmsmanager&key=ca25131a2f77fb2b80d82e63412fdc13&debug=1&cmd=status";
String url204 = "http://www.cmsservice.provahosting.it/index.php?option=com_cmsmanager&key=ca25131a2f77fb2b80d82e63412fdc13&debug=1&cmd=getUpdates";
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS).build();
//First request
Request request = new Request.Builder()
.url(url200)/*.addHeader("Connection", "close")*/
.build();
Response response = client.newCall(request).execute();
System.out.println(response.code()+">>>>" + response.body().string().getBytes().length + "<<<<");
response.body().close();
//Second request
Request request2 = new Request.Builder()
.url(url204)/*.addHeader("Connection", "close")*/
.build();
response = client.newCall(request2).execute();
System.out.println(response.code()+">>>>" + response.body().string().getBytes().length + "<<<<");
response.body().close();
//Third request
Request request3 = new Request.Builder()
.url(url200)/*.addHeader("Connection", "close")*/
.build();
response = client.newCall(request3).execute();
System.out.println(response.code()+">>>>" + response.body().string().getBytes().length + "<<<<");
response.body().close();
} catch (Exception e) {
e.printStackTrace();
}
Може ли някой да ми помогне да разбера какво пропускам или дали е грешка?