private fun addHeaderInterceptor(): Interceptor { return Interceptor { chain -> val originalRequest = chain.request() val requestBuilder = originalRequest.newBuilder() .header("User-Agent", "") .method(originalRequest.method, originalRequest.body) val request = requestBuilder.build() chain.proceed(request)

加入到httpclient里

      val sslParams = HttpsUtils.getSslSocketFactory(null,null,null)
        val client = OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.MINUTES)
            .readTimeout(2, TimeUnit.MINUTES)
            .writeTimeout(1, TimeUnit.MINUTES)
            .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) //添加信任证书
            .hostnameVerifier { _, _ -> true }//忽略host验证
            //加入头部
            .addInterceptor(addHeaderInterceptor())
            .build()
代码 说明
100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx...
				
Android开发中,发送HTTP请求是很常见的。SDK中自带的HttpURLConnection虽然能基本满足需求,但是在使用上有诸多不便,为此,square公司实现了一个HTTP客户端的类库——OkhttpOkhttp是一个支持HTTP 和 HTTP/2 的客户端,可以在Android和Java应用程序中使用,其具有以下特点: 1. API设计轻巧,基本上通过几行代码的链式调用即可获取结
今天自己写代码使用Retrofit下载百度搜索出来的图片的时候,发现了错了,403。然后使用Glide却可以加载图片。 然后对Glide进行抓包,发现Glide请求的时候 http header 是这种格式的: User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)...
strting()的使用响应主体上的string()方法对于小文档是方便和高效的。 但是如果响应体很大(大于1 MiB),请避免使用string(),因为它会将整个文档加载到内存中。 在这种情况下,更喜欢将主体作为流处理。 response.body().string()仅可调用一次,否则会错,---Caused by: java.lang.IllegalStateException: 查资料得知,okhttp不是原生的http请求,它在header里面并没有真正的User-Agent,而是“okhttp/版本号”这样的字符串,为okhttp设置User-Agent可以解决问题。 OkHttpClient.Builde
某些API应该是服务器设置了限制,使得手机端okhttp作为 http客户端时,获取数据,服务器返回HTTP 403禁止访问。 服务器禁止访问了,因为okhttp并不是真正的原生的http请求,它在header中并没有真正的User-Agent,而是“okhttp/版本号”。 如果是单纯的okHttp请求,不加Retrofit的 Request request = new Request.Builder().url(url) .removeHe...
HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接 连接池减少请求延时 透明的GZIP压缩减少响应数据的大小 缓存响应内容,避免一些完全重复的请求 当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IP,OkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接
出现android.view.ViewRootImpl$CalledFromWrongThreadException这种错误, 原因是因为在onResponse执行的线程并不是UI线程。需要: @Override public void onResponse(final Response response) throws IOException final String res
okhttp是一个现代化的高效的http库。它能使资源下载的更快和节省带宽。 okttp的高效体现在: * http/2 允许多个访问同一主机地址的请求共享同一个socket。 * 连接池减少了请求的延时 * 通过GZIP压缩下载时的文件大小 * Response缓存机制避免了网络请求完成时其它重复的请求。 如果你配置了多个服务端的IP地 RequestBody requestBody = new FormBody.Builder() .add("username", "admin") .add("password", "123456") .build(); 3. 创建Request对象 Request request = new Request.Builder() .url("http://www.example.com/login") .post(requestBody) .build(); 4. 发送请求并获取响应 Response response = client.newCall(request).execute(); String result = response.body().string(); 其中,第2步中的FormBody.Builder()可以根据实际情况选择其他类型的RequestBody,如Json格式的RequestBody。第3步中的url()方法需要替换成实际的请求地址。第4步中的execute()方法会阻塞当前线程,可以使用enqueue()方法进行异步请求。 ### 回答2: Okhttp是一种用于HTTP请求的第三方库,它非常简便易用,并且具有许多强大的功能。它可以用于GET请求和POST请求,还支持文件上传下载操作。 常见的POST请求用于发送表单数据和JSON数据。发送表单数据需要使用FormBody,而发送JSON数据则需要使用RequestBody。下面是一个基本示例: OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\n\"username\":\"testuser\",\n\"password\":\"testpassword\"\n}"); Request request = new Request.Builder() .url("http://example.com/login") .post(body) .build(); Response response = client.newCall(request).execute(); String responseString = response.body().string(); 在这个示例中,我们首先创建了一个OkHttpClient对象,然后使用MediaType对象将JSON字符串的Content-Type设置为application/json。接着,我们使用RequestBody.create方法创建了RequestBody对象,并传入JSON字符串和MediaType对象。在创建Request对象时,我们设置了URL和请求类型(post),并将RequestBody对象传递给它。最后,我们使用OkHttpClient对象的newCall方法异步地执行请求,并且获取Response对象的响应字符串。 需要注意的是,上述示例是同步执行的。如果要使用异步请求,可以使用enqueue方法,并传递一个Callback对象。enqueue方法将不会阻塞线程,并在请求完成后调用Callback的相应方法。 总之,使用Okhttp发送POST请求非常简便,并且可以用于发送表单数据和JSON数据。它还具有优秀的效率和稳定性,并且可以快速处理多个并发请求。 ### 回答3: 在Android应用程序中,OkHttp是一个流行的HTTP客户端库,可以用于执行HTTP请求和响应。它是由Square开发的,相比于Android原生的HttpURLConnection,OkHttp在多个方面都有不少的优势。 POST请求是HTTP请求类型中的一种,通常用于在服务器上创建新资源或更新现有资源。在使用OkHttp进行POST请求时,需要注意以下几点: 1.创建OkHttpClient对象 首先需要创建一个OkHttpClient实例,该实例负责发送HTTP请求和接收响应。可以使用默认的OkHttpClient.Builder,也可以自定义一些设置: OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); 2.创建请求体(RequestBody) POST请求需要在请求体(RequestBody)中添加提交的数据,可以使用FormBody或MultipartBody等来构建请求体。例如,在表单中添加两个参数(name和age): RequestBody body = new FormBody.Builder() .add("name", "张三") .add("age", "20") .build(); 3.创建请求(Request) 创建请求时,需要指定请求的URL、请求方式(POST)、请求头部和请求体。例如: Request request = new Request.Builder() .url("https://example.com/api/user") .post(body) .addHeader("Authorization", "Bearer " + token) .build(); 4.发送请求并接收响应 通过OkHttpClient发送请求,并且接收服务器响应。例如: try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseBody = response.body().string(); Log.d(TAG, "response: " + responseBody); } else { Log.d(TAG, "response unsuccessful"); } catch (IOException e) { Log.e(TAG, "error:" + e.getMessage()); 以上便是Android中使用OkHttp进行POST请求的大致流程,需要注意的是,请求和响应均需要在异步线程中进行,可以使用enqueue方式执行请求,使用回调方法接收响应。此外,还需要注意处理异常和错误情况。