gpt4 book ai didi

java - 改造 POST java.io.IOException : unexpected end of stream on Connection caused by java. io.EOFException:\n 未找到:

转载 作者:行者123 更新时间:2023-12-04 02:36:47 29 4
gpt4 key购买 nike

我已经完成了与此相关的所有问题,但是,我还没有找到适合我的解决方案。
我正在使用 retrofit 2.8.1OkHttp 4.5.0 .
我的服务界面如下所示

public interface MlApiService
{
@POST
@Multipart
Call<List<PreprocessedDocument>> postDocument( @Url String apiUrl, @Part MultipartBody.Part document,
@Part ( "document_id") RequestBody documentId );
}
我使用 requestTimeoutInSeconds 构建如下客户端设置为 90 秒。
public void init()
{
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter( new TypeToken<List<PreprocessedDocument>>() {}.getType(), new CustomResponseDeserializer() );

HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor();
logInterceptor.setLevel( HttpLoggingInterceptor.Level.HEADERS );

OkHttpClient client = new OkHttpClient.Builder().retryOnConnectionFailure( true ).addInterceptor( logInterceptor )
.readTimeout( requestTimeoutInSeconds, TimeUnit.SECONDS ).build();
//Dummy Base URL must be provided. otherwise client won't get initialized
Retrofit retrofit = new Retrofit.Builder().baseUrl( "http://thisIsJustDummyUrlForTheSakeOfAddingBaseUrl.com/" )
.client( client ).addConverterFactory( GsonConverterFactory.create( gson.setLenient().create() ) ).build();
mlApiService = retrofit.create( MlApiService.class );
}
请求到达服务器,就在服务器响应时,我收到以下错误:
Caused by: java.io.IOException: unexpected end of stream on Connection{34.XXX.XXX.9:8085, proxy=DIRECT hostAddress=/34.XXX.XXX.9:8085 cipherSuite=none protocol=http/1.1}
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:203)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
Caused by: java.io.EOFException: \n not found: limit=0 content=…
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:227)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:211)
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:187)
到目前为止我尝试过的几件事
  • retryOnConnectionFailure(true)
  • .addHeader("连接","关闭")
  • .header("接受编码", "身份")

  • postman 的 API 工作正常,但当我尝试使用代码时却失败了。所以我尝试了 postman 发送的相同标题。仍然没有运气。
    几个观察:
  • 它有时有效。不会总是失败。(同一个文件总是与 postman 一起工作)
  • 它始终适用于其他文件(从来没有问题)。
  • 请求到达服务器并处理请求而没有任何错误并做出响应。在服务器完成处理并响应客户端后,我立即收到错误消息。

  • 编辑 1:
    我命中的服务器由 gunicorn/20.0.4 支持并使用 Flask。我无权访问服务器代码。而且我怀疑收到的响应是否包含一些导致错误的垃圾字符。我不知道如何在被改造/okhttp 读取之前记录原始响应。
    编辑 2:
    我运行了详细的 Curl 命令,这就是我得到的。

    < HTTP/1.1 100 Continue

    • Empty reply from server
    • Connection #0 to host xx.xxx.xxx.9 left intactcurl: (52) Empty reply from server

    最佳答案

    短篇故事

    问题出在我击中的服务器上。它没有发送任何响应(字面上什么都没有。没有标题,没有正文,什么都没有)。

    很长的故事

    因此,在浏览了有关 stackoverflow、其他优秀网站的所有相关答案并尝试了我在问题本身中提到的这么多解决方案之后,它并没有解决我的问题。

    仔细阅读堆栈跟踪后,我遇到了以下行。

    okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:203)

    客户端(我的代码)正在尝试读取响应头,这就是错误 java.io.EOFException: \n not found: limit=0 content=被抛出。

    这给了我一个提示,问题可能出在服务器上,而不是出在客户端。所以我想我应该尝试不同的客户端,看看我是否可以看到原始响应。

    我想到的第一个工具是 Curl ( postman 过去常常给出通用的 无法得到任何响应 并且这并没有持续发生)。我使用带有详细选项和繁荣的 curl 访问了服务器!我得到以下回复:
    curl -v --location --request POST 'http://XX.XXX.XXX.9:8085/psc/document_upload' --form 'document=@/home/user376/Downloads/test-1.pdf' --form 'document_id=22004494_ae7f_4998_a1d8_73249bda9905'
    Note: Unnecessary use of -X or --request, POST is already inferred.
    * Trying XX.XXX.XXX.9...
    * Connected to XX.XXX.XXX.9 (XX.XXX.XXX.9) port 8085 (#0)
    > POST /psc/document_upload HTTP/1.1
    > Host: XX.XXX.XXX.9:8085
    > User-Agent: curl/7.49.0
    > Accept: */*
    > Content-Length: 4684053
    > Expect: 100-continue
    > Content-Type: multipart/form-data; boundary=------------------------a8446c7eedb10689
    >
    < HTTP/1.1 100 Continue
    * Empty reply from server
    * Connection #0 to host XX.XXX.XXX.9 left intact
    curl: (52) Empty reply from server

    这证实了问题出在服务器上,而不是出在客户端(改造/http)上。

    故事寓意:有时您必须逐字阅读堆栈跟踪,即使它看起来不值得一看:)

    关于java - 改造 POST java.io.IOException : unexpected end of stream on Connection caused by java. io.EOFException:\n 未找到:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61422009/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com