httpclient

SpringCloud:Spring Cloud 之 okhttp

孤者浪人 提交于 2020-08-10 07:10:07
1. 什么是 okhttp ? okhttp 是由 square 公司开源的一个 http 客户端。在 Java 平台上,Java 标准库提供了 HttpURLConnection 类来支持 HTTP 通讯。不过 HttpURLConnection 本身的 API 不够友好,所提供的功能也有限。大部分 Java 程序都选择使用 Apache 的开源项目 HttpClient 作为 HTTP 客户端。Apache HttpClient 库的功能强大,使用率也很高。 2. 为什么要使用 okhttp ? okhttp 的设计初衷就是简单和高效,这也是我们选择它的重要原因之一。它的优势如下:(了解源码可+求求: 1791743380) 支持 HTTP/2 协议。 允许连接到同一个主机地址的所有请求,提高请求效率。 共享Socket,减少对服务器的请求次数。 通过连接池,减少了请求延迟。 缓存响应数据来减少重复的网络请求。 减少了对数据流量的消耗。 自动处理GZip压缩。 3. 实战目标 Feign 中使用 okhttp 替代 httpclient Zuul 中使用 okhttp 替代 httpclient 4. 在 Feign 中使用 okhttp 首先介绍一下工程结构,本演示工程包含 provider-server、consumer-server、eureka-server 和

大多数人可能都不会使用socketTimeout,看了底层才知道一直都做错了

£可爱£侵袭症+ 提交于 2020-08-10 05:49:28
  前几天一个机房网络抖动,引发了很多对外请求的超时问题,在发生问题排查日志的时候,发现了这么一个现象,httpclient我们的请求超时时间并没有按照我们的设置报超时异常 我们的大概配置如下: RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout( 1000 ) .setSocketTimeout( 2000 ) .setConnectionRequestTimeout( 1000 ) .build(); 但实际却发现很多请求超时时间都达到了10几秒甚至有的二十几秒,大大超过了我们的预期时间,决定通过跟踪源码一探究竟: 原来http读取网络数据的时候是其实是使用的BufferedReader类,而我们知道java的io类其实都是对基本输入流的装饰,其底层其实是利用的SocketInputStream来读取数据,一路代码跟踪,我们跟踪到了这个方法 int read( byte b[], int off, int length, int timeout) throws IOException { int n = 0 ; // EOF already encountered if (eof) { return -1 ; } // connection reset if (impl

.NET Core HttpClientFactory+Consul实现服务发现

倖福魔咒の 提交于 2020-08-10 05:27:25
前言   上篇文章 .NET Core HttpClient+Consul实现服务发现 提到过,HttpClient存在套接字延迟释放的问题,高并发情况导致端口号被耗尽引起服务器拒绝服务的问题。好在微软意识到了这个问题,从.NET Core 2.1版本开始推出了HttpClientFactory来弥补这个问题。关于更详细的HttpClientFactory介绍可以查看微软官方文档 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1#httpclient-and-lifetime-management 我们了解到想把自定义的HttpMessageHandler注入到HttpClient内部,必须要通过构造函数。接下来我们就慢慢发觉如何给HttpClientFactory使用我们自定义的Handler。 HttpClient的创建   相信大家都已经清楚使用HttpClientFactory从services.AddHttpClient()注入相关类开始,我们就从这里开始入手。先贴上源码地址 HttpClientFactoryServiceCollectionExtensions源码 然后我们大概的看一下我们关注的实现方法,大致如下,代码有删减 ///

HTML5实现文件上传下载功能实例解析

放肆的年华 提交于 2020-08-10 02:33:55
前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。 1.特点: (1)支持客户/服务器模式。 (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 (4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 (5

因为我最近忙、所以我写了它

人走茶凉 提交于 2020-08-10 00:55:06
一、事出有因 1、上周工作原因项目的事情每天都很忙,周五下班和乐师兄下班的时候已经晚上11点了,然后和师兄吃了一个烧烤吃到了12点了(结果啥也没吃,钱也花了挺多的。ps:程序员建议养生)扯远了 ,主要是一周比较忙周六没有进行我们学校的健康报备信息填写。导致辅导员给我打了6个电话(现在我还是在实习中,所以还归学校管)自己刚好在看网络请求这一块的东西,说干就干!!! 二、知其所以然 1、我们学校的健康报备主要是将自己每天的信息填写到学校的公众号上面。打开页面是这样的。这个时候我们就要想一下我们是要做什么了。首先我们健康报备的流程是=>打开学校公众号=>输入自己的学号点击查询=>然后输入自己的正式情况=>点击提交。 三、反向分析 1、做为程序员的我们首先要清楚我们要什么,现在我们已经清楚了要做什么了和步骤。现在就是用我们的程序模拟用户进行正常的报备工作。首先我将报备链接从学校公众号复制出来,然后使用浏览器访问查看我们在进行报备的时候我们向浏览器发起了什么和做了什么。 2、在左边的是我们的页面,右边的是网页请求的文件和信息,我们就一步一步的进行分析。这里我们可以看到我们在访问页面的时候会生成一些信息_ _EVENTVALIDATION 、 __VIEWSTATEGENERATOR 我以前在长沙写的也是ASPX页面使用控件程序的时候也会生成一些这个

VUE大文件分片上传/多线程上传

心不动则不痛 提交于 2020-08-10 00:21:29
前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。 1.特点: (1)支持客户/服务器模式。 (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 (4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 (5

WCF Rest用法

喜欢而已 提交于 2020-08-09 21:36:57
GET GET单参数 服务器 [OperationContract] string GetOneParameter(string value); [WebInvoke(Method = "GET", UriTemplate = "GetOneParameter/{value}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] //写在UriTemplate中的参数,必须定义为string类型 public string GetOneParameter(string value) { return string.Format("You get: {0}", value); } 客户端 static string url = "http://localhost:8733/Design_Time_Addresses/WcfServicePractice/Service1/"; public static async void GetOneParameter(int value) { HttpClient client = new HttpClient(); var r= await client

第三十六节:gRPC身份认证和授权(JWT模式 和 集成IDS4)

可紊 提交于 2020-08-09 21:22:24
一. 再谈认证和授权 (详见:https://www.cnblogs.com/yaopengfei/p/13141548.html) 1.认证   是验证身份的一种机制,比如用户名和密码登录,这就是一种认证机制,再比如现在比较流行jwt校验,通过用户名和密码访问接口,验证通过获取token的过程,也叫做认证。 2.授权   是确定你是否有权限访问系统的某些资源. 比如用户登录成功进入系统以后,要进行增加博客这个功能,系统要判断一下该用户是否有权限访问这个增加博客的功能,这个过程就叫做授权。 再比如某个客户端app携带token访问服务端某个api接口,这个时候服务端要校验一下该token是否有权限访问这个api接口,这个过程也是授权。 3.Core Mvc中认证和授权   在Core Mvc中,UseAuthentication()代表认证,UseAuthorization()代表授权, 需要注意的是这里的认证和授权 与 上述广义上的理解有点差异,在Core MVC中,UseAuthentication和UseAuthorization一般 是成对出现,且UseAuthentication认证需要写在上面,且需要在对应的api接口上加[Authorize],代表该接口需要校验, 这样当该接口被请求的时候,才会走UseAuthentication中的认证逻辑。 (PS:

nacos入门系列之配置中心

二次信任 提交于 2020-08-09 20:43:36
之前学习了nacos注册中心,今天继续看看nacos的其他功能。 注册中心链接 https://www.imooc.com/article/305289 配置的发布与订阅 我们先来看看如何使用nacos提供的api来实现配置的发布与订阅 发布配置: public class ConfigPub { public static void main(String[] args) throws NacosException { final String dataId="test"; final String group="DEFAULT_GROUP"; ConfigService configService= NacosFactory.createConfigService("localhost:8848"); configService.publishConfig(dataId,group,"test config body"); } } 订阅配置: public static void main(String[] args) throws NacosException, InterruptedException { final String dataId="test"; final String group="DEFAULT_GROUP"; ConfigService

A connection attempt failed because the connected party did not properly respond

被刻印的时光 ゝ 提交于 2020-08-09 14:00:51
问题 I have a shared server on 1and1. In my MVC site, when I try to connect to another server outside I get this error: An error occurred while sending the request. Unable to connect to the remote server A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 23.xxx.xxx.xxx:80 When I run it on my development machine locally it works fine, but when I upload it to server by