Tag: okhttp3

使用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 […]

如何通过Okhttp3和Android将文件上传到Amazon S3

我把我的服务器的响应与亚马逊的证书发送一个文件,像这样一个文件,amazon s3url( https://exapmple-bucket.s3-us-west-2.amazonaws.com “)和json(”凭据“variables) : “key”:”somecache${filename}”, “success_action_status”:”201″, “acl”:”public-read”, “policy:”lagrepolicy”, “x-amz-credential”:”somecredential2/s3/aws4_request\”, “x-amz-algorithm”:”some”, “x-amz-date”:”somedate”, “x-amz-signature”:”some” 然后,我必须上传这个数据的文件到amazon s3,我的测试代码在Kotlin(java代码几乎相同): val requestBodyS3 = MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart(“key”,credentials.getString(“key”)) .addFormDataPart(“success_action_status”, credentials.getString(“success_action_status”)) .addFormDataPart(“acl”,credentials.getString(“acl”)) .addFormDataPart(“policy”,credentials.getString(“policy”)) .addFormDataPart(“x-amz-credential”, credentials.getString(“x-amz-credential”)) .addFormDataPart(“x-amz-algorithm”, credentials.getString(“x-amz-algorithm”)) .addFormDataPart(“x-amz-date”, credentials.getString(“x-amz-date”)) .addFormDataPart(“x-amz-signature”, credentials.getString(“x-amz-signature”)) .addFormDataPart(“file”, “file”, RequestBody.create((MEDIA_TYPE_FILE), file)) .build() // val MEDIA_TYPE_FILE = MediaType.parse(“image/jpeg”) 我用这个代码收到的“文件”(来自图库): intent.setType(“image/*”) startActivityForResult(intent, RC_CODE_PICK) .. onActivityResult: val selectedImage = data?.data val file […]

Kotlin okhttp3更改json方法为“Post”

val request = Request.Builder() .url(url) .method(“POST”,null) .addHeader(“_Token”,””) .addHeader(“Content-Type”,”application/json”) .build() 这段代码抛出一个exception。 如何添加方法types和标题? 谢谢你的回复。 引起:java.lang.reflect.InvocationTargetException引起:java.lang.IllegalArgumentException:方法POST必须有一个请求体。

Android-Kotlin中如何从单元获取字符串

我使用Okhttp3 GET方法到Web服务 val client= OkHttpClient() fun login_Chk(id:String,pw:String) { val req=Request.Builder() .url(“https://www.hxxxxxx.com/WebService.asmx/Login_Check?ID=${id}&PW=${pw}”) .build() client.newCall(req).enqueue(object : Callback{ override fun onFailure(call: Call, e: IOException) {} override fun onResponse(call: Call, res: Response) { println(res.body()?.string().toString()) return } }) } 我想检查web服务返回其“成功”或“失败” 下面我的Logcat android/bKfiHsgc_o.png 在C#中我们可以使用像 if(webservice(ID,PW) ==”Success”) { …… } 但在科特林,我不知道该怎么做。 谢谢

NoClassDefFoundError okhttp3.internal.io.FileSystem

我使用okhttp 3.6.0 , RxJava 2.01 。 android studio canery 6 。 我正在缓存中遇到一些问题。 fun cache(context: Context): Cache { return Cache(context.cacheDir,30 * 1000 * 1000) } 上面的方法在Android版本6.0中运行良好,但是当我在android 4.4(kitkat)中运行这个应用程序崩溃与ClassDefNotFoundError 。 java.lang.NoClassDefFoundError:okhttp3.internal.io.FileSystem 在okhttp3.Cache。(Cache.java:178) 任何人都可以提出可能是什么问题?

来自Retrofit的POST请求以意想不到的方式工作

有一个使用HTTPS的第三方网站,登录时起始页执行POST。 我已经在浏览器中检查了POST请求,然后我可以用Fiddler的作曲器手动创建请求。 因此,根据凭证,我可以成功或不成功地使用Fiddler登录。 返回代码始终为302,它们分别与用户管理页面的重定向(标题“位置”)或登录失败页面一起出现。 但是,当我使用Retrofit库创建请求时,它不起作用。 我得到的响应代码是200,在这个具体的情况下,不会被认为是成功的。 为了检查来自Retrospect的POST请求,我将它指向了Fiddler( http:// localhost:8888 )而不是第三方URL。 如果我将该请求复制到作曲家,并将URL调整为第三方,请求确实起作用。 也就是说,我无法找到由Retrofit构建的请求有任何问题。 有没有人有一个想法可能是错的? 我的代码是用Kotlin编写的,但是如果你知道Java应该很容易理解: import okhttp3.ResponseBody import retrofit2.Call import retrofit2.Retrofit import retrofit2.http.* interface MyApi { @POST("<relative login url>") @FormUrlEncoded @Headers( //… ) fun login( @Field("username") username: String, @Field("password") password: String ) : Call<ResponseBody>; } fun main(args: Array<String>) { val baseUrl = "https://<url>" val retrofit = […]

如何用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 […]

java.lang.NoClassDefFoundError:com.example.api.retrofit.AuthenticationInterceptor $ intercept $ 1

我最近添加了retrofit2到我的应用程序。 它在运行Android 8.0的Nexus 6P上运行良好,但是在运行Android 6.0.1的旧版OnePlus One上运行时遇到了一个错误: java.lang.NoClassDefFoundError: com.example.api.retrofit.AuthenticationInterceptor$intercept$1 at com.example.api.retrofit.AuthenticationInterceptor.intercept(AuthenticationInterceptor.kt:21) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) at okhttp3.RealCall.execute(RealCall.java:69) at retrofit2.OkHttpCall.execute(OkHttpCall.java:180) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall.execute(ExecutorCallAdapterFactory.java:91) at com.example.fragment.xx.XXFragment$onViewCreated$2.getItemsForConstraint(XXFragment.kt:53) at com.example.view.MyAutoCompleteTextView$Adapter$getFilter$1.performFiltering(MyAutoCompleteTextView.kt:114) at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) 这是我的代码: 的build.gradle buildscript { ext { okhttpVersion = '3.8.0' retrofitVersion = '2.3.0' } … } 应用程序/的build.gradle: compile "com.squareup.okhttp3:okhttp:$okhttpVersion" compile "com.squareup.okhttp3:logging-interceptor:$okhttpVersion" compile […]

你怎么得到一个Idlingresource工作在Kotlin与协程

我的Espresso怠速资源不工作 – 它编译并运行,但不再等待足够长的时间来从“网络”返回结果。 从https://github.com/chiuki/espresso-samples/tree/master/idling-resource-okhttp开始 将主要活动转换为Kotlin – test(仍然在java中)仍然可以与OKHttpIdlingResource一起使用 转换到anko协程调用,而不是retrofit.enqueue – 测试不再起作用。 以下是MainActivity的全部新代码 import android.app.Activity import android.os.Bundle import android.widget.TextView import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.async import org.jetbrains.anko.coroutines.experimental.bg import retrofit2.Retrofit import retrofit2.converter.moshi.MoshiConverterFactory class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) doCallAsync() } private fun doCallAsync() = async(UI) { val user = bg { getUser() } val […]