Java 改装2-SSLException而不是413

Java 改装2-SSLException而不是413,java,android,nginx,retrofit2,http-status-code-413,Java,Android,Nginx,Retrofit2,Http Status Code 413,我正在尝试向NGinx/1.10.2服务器发送一个文件(230MB) 服务器配置为处理最大200MB的数据 我发送的文件如下: @Multipart @POST("api/test") Completable test( @PartMap Map<String, RequestBody> params, @Part MultipartBody.Part file ); 现在我期望413状态代码出现错误。不幸的是,我收到: <-- HTTP FA

我正在尝试向
NGinx/1.10.2
服务器发送一个文件(230MB)

服务器配置为处理最大200MB的数据

我发送的文件如下:

@Multipart
@POST("api/test")
Completable test(
        @PartMap Map<String, RequestBody> params,
        @Part MultipartBody.Part file
);
现在我期望413状态代码出现错误。不幸的是,我收到:

<-- HTTP FAILED: javax.net.ssl.SSLException: Write error: ssl=0x76c8f32400: I/O error during system call, Connection reset by peer
请求部分:

public Completable test(File file) {
    Map<String, RequestBody> map = getInfo();

    RequestBody body = RequestBody.create(MediaType.parse(getMimeType(file.toString())), file);
    MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), body);

    return retrofit.create(Api.class)
            .flatMapCompletable(api -> api.test(map, fileToUpload));
}
公共可完成测试(文件){
Map=getInfo();
RequestBody=RequestBody.create(MediaType.parse(getMimeType(file.toString())),file);
MultipartBody.Part fileToUpload=MultipartBody.Part.createFormData(“文件”,file.getName(),body);
返回改装。创建(Api.class)
.flatMapCompletable(api->api.test(map,fileToUpload));
}
这应该起作用:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(YOUR_HTTPS_URL)
    .setClient(getUnsafeOkHttpClient())
    .build();

显示代码的RequestBody部分,也可以试试这个。好。。。谢谢你的回复,但是。。。几件事:1)
sslSocketFactory
方法已被弃用;2) 相信一切通常是个坏主意;3) 即使我尝试了你的解决方案,也无济于事。
public Completable test(File file) {
    Map<String, RequestBody> map = getInfo();

    RequestBody body = RequestBody.create(MediaType.parse(getMimeType(file.toString())), file);
    MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), body);

    return retrofit.create(Api.class)
            .flatMapCompletable(api -> api.test(map, fileToUpload));
}
    public static OkHttpClient getUnsafeOkHttpClient() {

    try {
        // Create a trust manager that does not validate certificate chains
        final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] chain,
                    String authType) throws CertificateException {
            }

            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[0];
            }
        } };

        // Install the all-trusting trust manager
        final SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, trustAllCerts,
                new java.security.SecureRandom());
        // Create an ssl socket factory with our all-trusting manager
        final SSLSocketFactory sslSocketFactory = sslContext
                .getSocketFactory();

        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient = okHttpClient.newBuilder()
                .sslSocketFactory(sslSocketFactory)
                .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).build();

        return okHttpClient;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(YOUR_HTTPS_URL)
    .setClient(getUnsafeOkHttpClient())
    .build();