Публичный аккаунт WeChat: Фэн Вэньи (ID: fwy-world)
HTTP-запросы относительно распространены в повседневной разработке. Сегодня я расскажу вам, как использовать HttpUtils.
Прочитав эту статью, вы получите:
Привет всем, при разработке на Java мы часто сталкиваемся с необходимостью вызова сервисов интерфейса, предоставляемых сторонними организациями. Общая форма — HTTP + JSON. Ниже мы объясним общие настройки http-запросов.
http предоставляет множество методов запроса для удовлетворения наших ежедневных потребностей. Давайте сначала объясним метод запроса:
При разработке RESTful API мы можем разработать интерфейс API на основе этих методов запроса. Пример:
Формат параметра
другой
Простой запрос на получение
System.out.println(HttpUtils.get("https://www.baidu.com"));
Результат ответа:
С помощью простой попытки доказываются два момента:
Если вас просят написать http-запрос от руки, возможно, у вас в голове пусто и вы ищете различную информацию.
Давайте попробуем еще один сложный
интерфейс:
адрес интерфейса:https://erwin-api.fengwenyi.com/erwin/blog/page
Метод запроса: ПОЛУЧИТЬ
Параметры: currentPage, pageSize
Формат параметра:form
Ответ: приложение/json
String url = "https://erwin-api.fengwenyi.com/erwin/bookmark/page?currentPage=1&pageSize=10";
Request request = new Request();
request.setUrl(url);
request.setMethod(Request.Method.GET);
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Accept", "application/json");
Request.Option option = new Request.Option();
option.setHeaders(headerMap);
try {
System.out.println(HttpUtils.execute(request, option));
} catch (IOException e) {
throw new RuntimeException(e);
}
Результат ответа:
{
"code":"SUCCESS",
"message":"Success",
"success":true,
"header":null,
"body":{
"currentPage":1,
"pageSize":10,
"totalRows":661,
"totalPages":67,
"content":[
{
"id":"1634772578877935617",
"timestamp":1678595130000,
"enabledState":null,
"name":"VScode Решение проблемы появления желтого поля на китайском языке display_vscode Китайские иероглифы в рамке_Блог YJer-блог CSDN",
"url":"https://blog.csdn.net/qq_33249042/article/details/123252625",
"icon":null,
"classifyName":"программное обеспечение",
"classifyId":"1522587269600481281"
},
{
"id":"1632640455110922241",
"timestamp":1678086792000,
"enabledState":null,
"name":"Четыре способа использования метода init-methoddestroy-method в блоге Spring_Xingye Gufan — блог CSDN",
"url":"https://blog.csdn.net/qq_38826019/article/details/117387398",
"icon":null,
"classifyName":"Spring",
"classifyId":"1522586360887742466"
},
{
"id":"1631597310596190209",
"timestamp":1677838087000,
"enabledState":null,
"name":"vue3 + elemenplus реализует панель навигации - Наггетсы»,
"url":"https://juejin.cn/post/7084871748608327687",
"icon":null,
"classifyName":"интерфейс",
"classifyId":"1525554881275990018"
},
{
"id":"1631593154401636354",
"timestamp":1677837096000,
"enabledState":null,
"name":"Spring bean Анализ исходного кода процесса создания - Сообщество разработчиков Tencent Cloud — Tencent Cloud»,
"url":"https://cloud.tencent.com/developer/article/1631160",
"icon":null,
"classifyName":"Spring",
"classifyId":"1522586360887742466"
},
{
"id":"1631592987673858050",
"timestamp":1677837056000,
"enabledState":null,
"name":"Анализ исходного кода запуска контейнера SpringBoot и загрузка bean-компонентов loading_springboot Исходный код_minemine0418's blog-CSDN blog",
"url":"https://blog.csdn.net/minemine0418/article/details/102308912",
"icon":null,
"classifyName":"Spring Boot",
"classifyId":"1522586446766116865"
},
{
"id":"1631586585454678018",
"timestamp":1677835530000,
"enabledState":null,
"name":"Жизненный цикл Spring-Bean - Чжиху",
"url":"https://zhuanlan.zhihu.com/p/158468104",
"icon":null,
"classifyName":"Spring",
"classifyId":"1522586360887742466"
},
{
"id":"1631579732104548354",
"timestamp":1677833896000,
"enabledState":null,
"name":"Прочитать в одной статье Spring Bean жизненный цикл_весна Жизненный цикл компонента_Блог архитектуры Лао Чжуляо-Блог CSDN",
"url":"https://blog.csdn.net/riemann_/article/details/118500805",
"icon":null,
"classifyName":"Spring",
"classifyId":"1522586360887742466"
},
{
"id":"1630768897186697218",
"timestamp":1677640578000,
"enabledState":null,
"name":"MySQL подсчитывает количество записей для нескольких условий одновременно_блог ztnhnr-блог CSDN",
"url":"https://blog.csdn.net/ztnhnr/article/details/107165942",
"icon":null,
"classifyName":"MySQL",
"classifyId":"1522586805693681666"
},
{
"id":"1630768792098410497",
"timestamp":1677640553000,
"enabledState":null,
"name":"sql запросит данные за последние семь дней, последние две недели и последний месяц_sql-данные за последнюю неделю_блог Синьчэна Зелинга-блог CSDN",
"url":"https://blog.csdn.net/wenchangwenliu/article/details/119891790",
"icon":null,
"classifyName":"MySQL",
"classifyId":"1522586805693681666"
},
{
"id":"1630480535938764801",
"timestamp":1677571827000,
"enabledState":null,
"name":"Какой движок с открытым исходным кодом лучше и как его выбрать? - Чжиху",
"url":"https://zhuanlan.zhihu.com/p/369761832",
"icon":null,
"classifyName":"Java",
"classifyId":"1522586296119300097"
}
]
}
}
Результаты ответов по-прежнему соответствуют ожиданиям.
конечно,HTTPкромедругой,Например, тайм-аут и т. д.,Взгляните на полный пример запроса ниже:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("currentPage", 1);
paramMap.put("pageSize", 10);
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Accept", "application/json");
Request request = new Request();
request.setUrl("https://erwin-api.fengwenyi.com/erwin/bookmark/page");
request.setParam(paramMap);
request.setMethod(Request.Method.GET);
request.setUtil(Request.Util.OkHttp);
Request.Option option = new Request.Option();
option.setHeaders(headerMap);
option.setConnectTimeoutSecond(3);
option.setReadTimeoutSecond(5);
option.setLogLevel(Request.LogLevel.DEBUG);
try {
String result = HttpUtils.execute(request, option);
System.out.println(result);
} catch (IOException e) {
throw new RuntimeException(e);
}
Результат ответа такой же, как указано выше.
сначала это Request
и Response
В соответствии с HTTP-запросом и ответом путь к пакету выглядит следующим образом:
кроме того,com.fengwenyi.javalib.http.Request.Option
Для хранения конфигурации параметров HTTP.
Источником идей для этой части является Spring Cloud OpenFeign.
Чтобы быть совместимым с несколькими инструментами HTTP для реализации запросов, HttpClientFactory
,другой Инструменты,Пока это осознается HttpClient
Просто интерфейс.
Хорошо, давайте посмотрим на код ниже:
HttpUtils#execute
public static String execute(Request request, Request.Option option) throws IOException {
check(request);
HttpClient httpClient = HttpClientFactory.get(request.getUtil());
Response response = httpClient.execute(request, option);
return handleResponse(response);
}
HttpClientFactory#get
public static HttpClient get(Request.Util httpUtil) {
if (Request.Util.JDK == httpUtil) {
return new JdkHttpClient();
} else if (Request.Util.OkHttp == httpUtil) {
return new OkHttpClient();
} else {
throw new RuntimeException("not find http util: " + httpUtil.name());
}
}
Итак, просто реализуйте HttpClient#execute
Просто интерфейс.
Response execute(Request request, Request.Option option) throws IOException;
Исходный код:https://github.com/fengwenyi/JavaLib
хорошо,Вот и все, чем можно поделиться на сегодняшний день. Я Сяо Фэн,Java-программист,Фокус на программировании и разработке,Если у вас есть проблемы с развитием жизни,Добро пожаловать для общения вместе.