httpclient

.net core HttpClient 使用之掉坑解析(一)

吃可爱长大的小学妹 提交于 2020-08-17 06:17:54
.net core HttpClient 使用之掉坑解析(一) 一、前言 在我们开发当中经常需要向特定URL地址发送Http请求操作,在.net core 中对httpClient使用不当会造成灾难性的问题,这篇文章主要来分享.net core中通过IHttpClientFactory 工厂来使用HttpClient的正确打开方式。 二、HttpClient使用中的那些坑 2.1 错误使用 using(var client = new HttpClient()) 我们可以先来做一个简单的测试,代码如下: public async Task GetBaiduListAsync(string url) { var html = ""; for (var i = 0; i < 10; i++) { using (var client = new System.Net.Http.HttpClient()) { var result=await client.GetStringAsync(url); html += result; } } return html; } 运行项目输出结果后,通过netstate查看下TCP连接情况: 虽然项目已经运行结束,但是连接依然存在,状态为" TIME_WAIT"(继续等待看是否还有延迟的包会传输过来;默认在windows下,TIME

【微信小程序】springboot后台获取用户的openid

↘锁芯ラ 提交于 2020-08-17 04:30:05
openid可以标识一个用户,session_key会变,所以来获取一下openid。 openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序。 发布的小程序需要https的域名,而测试的时候可以使用http。 小程序在app.js中,修改login()中的内容: // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId if (res.code) { wx.request({ url: 'http://localhost:84/user/login' , method: 'POST' , data: { code: res.code }, header: { 'content-type': 'application/x-www-form-urlencoded' }, success(res) { console.log( "openid:"+ res.data.openid); if (res.data.openid != "" || res.data.openid!= null ){ // 登录成功 wx.setStorageSync("openid", res.data

第十一节:Ocelot集成IDS4认证授权-微服务主体架构完成

一曲冷凌霜 提交于 2020-08-17 03:42:44
一. 前言 1.业务背景   我们前面尝试了在业务服务器上加IDS4校验,实际上是不合理的, 在生产环境中,业务服务器会有很多个,如果把校验加在每个业务服务器上,代码冗余且不易维护(很多情况下业务服务器不直接对外开放), 所以我们通常把校验加在Ocelot网关上,也就是说校验通过了,Ocelot网关才会把请求转发给相应的业务服务器上.(我们这里通常是网关和业务服务器在一个内网中,业务服务器不开放外网) (和前面:Jwt配合中间件校验流程上是一样的,只不过这里的认证和授权都基于IDS4来做) PS:关于IDS4服务器,可以配置在网关后面,通过网关转发;    也可以不经网关转发,单独存在, 这里要说明的是,如果经过网关转发,那么对于IDS4而言,只是单纯的转发,不走Ocelot上的校验,其实也很简单,就是 不配置AuthenticationProviderKey即可. 2.用到的项目 (1).Case2下的GateWay_Server :网关服务器 (2).Case2下的ID4_Server:认证+授权服务器 (3).GoodsService + OrderService:二者都是资源服务器 (4).PostMan:充当客户端(即第三方应用) (5).MyClient2:用控制台充当客户端(即第三方应用) (6).Consul:网关Ocelot已经集成Consul服务发现了

ftp-ftps-sftp的工具类

夙愿已清 提交于 2020-08-16 00:42:03
pom.xml的依赖,由依赖commons-httpclients的老板3.1其实也没有用到,需要修改。 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.54</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-httpclient/commons

C# HttpClient 使用 Consul 发现服务

久未见 提交于 2020-08-15 21:51:29
  试用了Overt.Core.Grpc, 把 GRPC 的使用改造得像 WCF, 性能测试也非常不错, 非常推荐各位使用.   但已有项目大多是 http 请求, 改造成 GRPC 的话, 工作量比较大, 于是又找到了 Steeltoe.Discovery, 在 Startup 给 HttpClient 添加 DelegatingHandler, 动态改变请求url中的 host 和 port, 将http请求指向consul 发现的服务实例, 这样就实现了服务的动态发现.   经过性能测试, Steeltoe.Discovery 只有 Overt.Core.Grpc 的20%, 非常难以接受, 于是自己实现了一套基于 consul 的服务发现工具. 嗯, 名字好难取啊, 暂定为 ConsulDiscovery.HttpClient 吧   功能很简单: webapi 从json中读取配置信息 ConsulDiscoveryOptions; 如果自己是一个服务, 则将自己注册到consul中并设置健康检查Url; ConsulDiscovery.HttpClient 内有一个consul client 定时刷新所有服务的url访问地址.   比较核心的两个类 using Consul; using Microsoft.Extensions.Options; using

HttpClient中的DELETE请求方式

旧巷老猫 提交于 2020-08-15 16:48:24
HttpClient中DELETE请求,是没有办法带参数的。因为setEntity()方法是抽象类HttpEntityEnclosingRequestBase类里的方法,HttpPost继承了该类,而HttpDelete类继承的是HttpRequestBase类。下面是没有setEntity()方法的。 需要自己创建一个新类,然后照着HttpPost的抄一遍,让新类能够调用setEntity()方法 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import java.net.URI; public class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { public static final String METHOD_NAME = "DELETE"; @Override public String getMethod(){ return METHOD_NAME; } public HttpDeleteWithBody(final String uri){ super(); setURI(URI.create(uri)); } public HttpDeleteWithBody(final URI uri){

HttpClient高级进阶-ConnectionManager

时光总嘲笑我的痴心妄想 提交于 2020-08-15 15:11:02
简述 本文介绍HttpClient的连接管理,主要介绍使用BasichttpClientConnectionManager和PoolingHttpClientConnectionManager来实现强制安全,协议兼容和有效使用HTTP连接。 用于单线程连接的BasicHttpClientConnectionManager 自HttpClient 4.3.3起,BasicHttpClientConnectionManager可用作HTTP连接管理器的最简单实现。它用于创建和管理一次只能由一个线程使用的单个连接。 获取低级别连接的连接请求(HttpClientConnection) BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager ( ) ; HttpRoute route = new HttpRoute ( new HttpHost ( "http://localhost:8080" , 80 ) ) ; ConnectionRequest connRequest = connManager . requestConnection ( route , null ) ; 该 requestConnection方法 从connManager得到的连接池的特定路线来连接

Feign原理 (图解)

北城以北 提交于 2020-08-15 14:02:44
疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列 【 博客园总入口 】 疯狂创客圈 正在 进行分布式和高并发基础原理 的研习,进行已经发布一些基础性的文章: 一、 版本1 :springcloud + zookeeper 秒杀 以及有关Springcloud 几篇 核心、重要的文章 : 一、 Springcloud 配置, 史上最全 一文全懂 二、 Feign Ribbon Hystrix 三者关系 , 史上最全 深度解析 三、 SpringCloud gateway 详解 , 史上最全 四、 常识纠错:Feign 默认不用 短连接 1SpringCloud 中 Feign 核心原理 如果不了解 SpringCloud 中 Feign 核心原理,不会真正的了解 SpringCloud 的性能优化和配置优化,也就不可能做到真正掌握 SpringCloud。 本章从Feign 远程调用的重要组件开始,图文并茂的介绍 Feigh 远程调用的执行流程、Feign 本地 JDK Proxy 实例的创建流程,彻底的为大家解读 SpringCloud 的核心知识。使得广大的工程师不光做到知其然,更能知其所以然。 1.1 简介:Feign远程调用的基本流程 Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式

如何设置HttpClient请求的Content-Type标头?

强颜欢笑 提交于 2020-08-14 16:26:46
问题: I'm trying to set the Content-Type header of an HttpClient object as required by an API I am calling. 我正在尝试根据我正在调用的API设置 HttpClient 对象的 Content-Type 标头。 I tried setting the Content-Type like below: 我尝试如下设置 Content-Type : using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("http://example.com/"); httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json"); // ... } It allows me to add the Accept header but when I try to add Content-Type it throws the following exception: 它允许我添加 Accept

第九节:IdentityServer4简介及客户端模式和用户密码模式的应用

南楼画角 提交于 2020-08-14 15:24:49
一. IDS4简介 1. 什么是IDS4   IdentityServer是基于OpenID Connect协议标准的身份认证和授权程序,它实现了OpenID 和 OAuth 2.0 协议。 2. 相关地址  (1).官网:https://identityserver4.readthedocs.io/en/latest/  (2).GitHub地址:https://github.com/IdentityServer  (2).三方中文文档:http://www.identityserver.com.cn/Home/Detail/Zhengtizongshu 3. IDS4有哪些功能  (1).身份认证服务(官方认证的OpenID Connect实现)  (2).单点登录与注销(SSO)  (3).访问受控的Api 4. IDS4的内部概念 (1).用户-User   使用已注册的客户端(指在id4中已经注册)访问资源的人。 (2).客户端-Client (即第三方应用)   客户端就是从identityserver请求令牌的软件(你可以理解为一个app即可),既可以通过身份认证令牌来验证识别用户身份,又可以通过授权令牌来访问服务端的资源。但是客户端首先必须在申请令牌前已经在 identityserver服务中注册过。实际客户端不仅可以是Web应用程序,app或桌面应用程序