Tag: okhttp

使用OkHttp上传到预先签署的S3 URL失败

当我尝试使用OkHttp 3.9.1将文件上传到Amazon S3的预签名URL时,出现SSLexception: SSLException: Write error: ssl=0xa0b73280: I/O error during system call, Connection reset by peer 这是同样的问题,在另一个SO问题,但在我的情况下,它总是失败。 我只上传大小超过1MiB的文件,我还没有尝试过小文件。 正如我在这个问题的答案中提到的,切换到Java的HttpURLConnection解决了这个问题,上传完美。 这里是我的RequestBody实现(在Kotlin)从Android的Uri上传文件,我使用OkHttp的.put()方法: class UriRequestBody(private val file: Uri, private val contentResolver: ContentResolver, private val mediaType: MediaType = MediaType.parse(“application/octet-stream”)!!): RequestBody() { override fun contentLength(): Long = -1L override fun contentType(): MediaType? = mediaType override fun writeTo(sink: BufferedSink) { Okio.source((contentResolver.openInputStream(file))).use […]

Kotlin – 如何用OkHttp Kotlin设置连接超时

我看到这个` 如何使用OkHttp设置连接超时 但是这个链接为Java(Android)语言。我想用kotlin Language …`我正在使用OkHttp库 val client = OkHttpClient() val time = client.connectTimeoutMillis() // it’s get only methood but i looking for method for set Timeout 而我的麻烦是我无法find如何设置连接超时和套接字超时对于Kotlin。

握手使用okHttp失败,但使用HttpURLConnection工作

我试图发送请求到服务器(发送请求测试,实际上我需要发送一个请求到同一台服务器。如果得到工作,发布将工作) 链接到服务器是https://bits-bosm.org/2017/registrations/signup/ 问题是当我发送请求使用okHttp,我得到一个失败的回应说握手失败。 这里是我使用的代码发送请求使用okHttp(在kotlin) val request = Request.Builder() .url("https://bits-bosm.org/2017/registrations/signup/") .build() okHttpClient.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call?, e: IOException?) { val mMessage = e?.message?.toString() Log.w("failure Response", mMessage) } override fun onResponse(call: Call?, response: Response?) { val mMessage = response?.body()?.string() Log.e("Message", mMessage) } }) 但是,如果我使用HttpUrlConnection发送获取请求到同一台服务器,我得到的答复。 这里是相同的代码(Java) private static final String USER_AGENT = "Mozilla/5.0"; private static […]

如何用OkHttp下载多个文件?

我需要使用OkHttp libarary下载多个文件。 所有下载完成后,我需要通知用户。 我知道如何用OkHttp下载一个文件。 这是代码: OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); okHttpClient.newCall(request).enqueue(new okhttp3.Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { Log.d("TAG", "download file fail: " + e.getLocalizedMessage()); } @Override public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { if (response.isSuccessful()) { //I have response data of downloaded […]

为什么OkHttp不重用它的连接?

我使用OkHttp 3.5.0执行http-benchmark。 我发送了数千个请求到相同的URL。 我期望OkHttp客户端使用ConnectionPool并重复使用它的连接。 但是如果我们看一下netstat我们会看到TIME_WAIT状态下有很多连接: TCP 127.0.0.1:80 127.0.0.1:51752 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51753 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51754 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51755 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51756 TIME_WAIT … 成千上万的请求后,我得到一个SocketException: No buffer space available (maximum connections reached?) 代码执行请求(Kotlin): val client = OkHttpClient.Builder() .connectionPool(ConnectionPool(5, 1, TimeUnit.MINUTES)) .build() val request = Request.Builder().url("http://192.168.0.50").build() while (true) { val response = client.newCall(request).execute() response.close() […]