OkHttp3发送http请求在Java中的使用方法

简介: 记录总结一下Http的get请求和post请求的使用方法和问题解决
+关注继续查看

前言

最近在使用OkHttp3开发的时候,出现了一些问题,记录总结一下Http的get请求和post请求的使用方法和问题解决!

1. Get请求

Request request = new Request.Builder()
    .url(url)
    .addHeader("键", "值")
    .addHeader("键", "值")
    ...
    .get()
    .build();

2. Post请求

RequestBody body = new FormBody.Builder()
    .add("键", "值")
    .add("键", "值")
    ...
    .build();
Request request = new Request.Builder()
    .url(url)
    .addHeader("键", "值")
    .addHeader("键", "值")
    ...
    .post(body)
    .build();

post请求需要提交一个表单,就是RequestBody。

RequestBody的数据格式都要指定Content-Type,常见的有三种:

  • application/x-www-form-urlencoded 数据是个普通表单
  • multipart/form-data 数据里有文件
  • application/json 数据是个json

2.1 普通表单

RequestBody body = new FormBody.Builder()
    .add("键", "值")
    .add("键", "值")
    ...
    .build();

注意:表面上普通表单并没有指定Content-Type,但是FormBody继承了RequestBody,它已经指定了数据类型为application/x-www-form-urlencoded。

2.2 Json表单

JSONObject json = new JSONObject();
json.put("键", "值");
...
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);

2.3 文件表单

RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/png"), file))
    .build();

MultipartBody也是继承RequestBody,适用于如下五种Content-Type:

public static final MediaType MIXED = MediaType.parse("multipart/mixed");
public static final MediaType ALTERNATIVE = MediaType.parse("multipart/alternative");
public static final MediaType DIGEST = MediaType.parse("multipart/digest");
public static final MediaType PARALLEL = MediaType.parse("multipart/parallel");
public static final MediaType FORM = MediaType.parse("multipart/form-data");

3. 问题解决

问题java.io.EOFException: \n not found: limit=0 content=…

问题原因

  • 服务器在返回数据后就直接关闭 TCP 连接,而客户端(项目应用)却将连接放入连接池重复使用;
  • 当下次请求复用时,连接已经被关闭,就读取不到返回值,报上述异常。
  • 如果等待一段时间,等连接池杀掉闲置连接,那下次请求就会重新建立一个连接,就可以正常拉到视频。

解决方法

  • 设置 retryOnConnectionFailure(true)
  • addHeader(“Connection”,“close”)
  • addHeader(“Accept-Encoding”, “identity”)
相关文章
|
29天前
|
Java 应用服务中间件
第一季:9SpringMVC中如何解决POST请求中文乱码问题,GET的又如何处理呢【Java面试题】
第一季:9SpringMVC中如何解决POST请求中文乱码问题,GET的又如何处理呢【Java面试题】
9 0
|
1月前
|
SQL Java 数据处理
Java中的HttpServletRequest:解析与处理HTTP请求
在现代的Java Web应用开发中,与客户端的数据交互是至关重要的一部分。Spring框架中的`HttpServletRequest`对象为我们提供了处理和解析HTTP请求的能力。本文将引导您深入了解`HttpServletRequest`对象,探讨其特点、用法、实现方式以及在实际应用中的优势。
|
1月前
|
XML JSON Java
深入解析 Java 中的 @RequestBody 注解:实现请求体数据的精准处理
在现代 Web 开发中,RESTful API 已经成为了构建应用程序的重要方式,而 Java 中的 `@RequestBody` 注解则是实现请求体数据处理的关键。通过该注解,我们可以将 HTTP 请求中的数据直接映射到 Java 对象,从而实现数据的精准处理和转换。本文将带您深入探索 Java 中的 `@RequestBody` 注解,揭示其原理、用法以及在实际开发中的应用场景。
|
1月前
|
Java 测试技术 API
Java RESTful中的PATCH请求:局部更新与资源修改
在RESTful架构中,PATCH请求是一种用于局部更新已有资源的操作。PATCH请求允许客户端将部分数据发送到服务器,以便对资源进行局部修改,而不必替换整个资源。本文将引导您深入了解Java中使用PATCH请求构建RESTful API,探讨其特点、实现方式、用例以及在实际应用中的优势。
|
1月前
|
Java 测试技术 API
Java RESTful中的DELETE请求:资源的删除与数据清除
在RESTful架构中,DELETE请求是一种用于删除已有资源的关键操作。DELETE请求允许客户端请求服务器删除指定的资源,以及与之关联的数据。本文将引导您深入了解Java中使用DELETE请求构建RESTful API,探讨其特点、实现方式、用例以及在实际应用中的优势。
|
1月前
|
Java 测试技术 API
Java RESTful中的PUT请求:资源的更新与完整替换
在RESTful架构中,PUT请求是一种用于更新或完整替换资源的重要操作。PUT请求允许客户端发送数据到服务器,以更新已有资源的状态,或者用新数据完全替换旧资源。本文将引导您深入了解Java中使用PUT请求构建RESTful API,探讨其特点、实现方式、用例以及在实际应用中的优势。
|
1月前
|
XML Java 测试技术
Java RESTful中的POST请求:资源的创建与数据传递
在RESTful架构中,POST请求是一种用于创建新资源的重要操作。它不仅可以传递数据到服务器,还能够在服务器端创建新的资源并返回相应的状态。本文将带您深入了解Java中使用POST请求构建RESTful API,探讨其特点、实现方式、用例以及在实际应用中的优势。
|
1月前
|
缓存 Java 测试技术
探索Java RESTful中的GET请求:资源的获取与无状态通信
在现代Web应用开发中,HTTP的GET请求是一种常见而重要的通信方式。它是RESTful架构中的核心操作之一,用于获取资源的信息。本文将带您深入了解Java中使用GET请求来构建RESTful API,探讨其特点、实现方式、用例以及在实际应用中的优势。
|
1月前
|
XML JSON Java
Java实现根据商品ID请求震坤行商品详情数据方法
Java实现根据商品ID请求震坤行商品详情数据方法
30 0
|
1月前
|
XML JSON 缓存
Java实现根据商品ID请求京东工业商品详情数据方法
Java实现根据商品ID请求京东工业商品详情数据方法
19 0
相关产品
云迁移中心
推荐文章
更多