httpclient

Spring 线程池实战

百般思念 提交于 2020-10-24 16:11:22
应用场景 老王上线了一个电商平台,最近需要开发一个功能,使用户能够直接点击物流编号查询到物流信息。通过对比,选择了一个快递聚合查询平台作为接入方,但是由于使用的是免费账号,快递聚合平台只允许最多 2个并发 ,否则查询失败。我们要如何帮助老王去解决这个问题呢? 聪明的程序员小张想了一下,很快就整理出来解决问题的思路: 首先用 Httpclient 实现与物流聚合平台的对接 创建一个物流查询 Service 类,基于线程接口 创建一个 Sping 固定大小线程池 Controller 接口通过线程池访问物流接口,异步返回 POM.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns = "http://maven.apache.org/POM/4.0.0 " xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " > <modelVersion >4.0.0 </modelVersion > <groupId >com.suoron.springmvc <

Golang 网络编程

末鹿安然 提交于 2020-10-24 13:02:01
目录 TCP网络编程 UDP网络编程 Http网络编程 理解函数是一等公民 HttpServer源码阅读 注册路由 启动服务 处理请求 HttpClient源码阅读 DemoCode 整理思路 重要的struct 流程 transport.dialConn 发送请求 TCP网络编程 存在的问题: 拆包: 对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。 通过网络传输的数据包最大是1500字节,当 TCP报文的长度 - TCP头部的长度 > MSS(最大报文长度时) 将会发生拆包,MSS一般长(1460~1480)字节。 粘包: 对发送端来说:应用程序发送的数据很小,远小于socket的缓冲区的大小,导致一个数据包里面有很多不通请求的数据。 对接收端来说:接收数据的方法不能及时的读取socket缓冲区中的数据,导致缓冲区中积压了不同请求的数据。 解决方法: 使用带消息头的协议,在消息头中记录数据的长度。 使用定长的协议,每次读取定长的内容,不够的使用空格补齐。 使用消息边界,比如使用 \n 分隔 不同的消息。 使用诸如 xml json protobuf这种复杂的协议。 实验:使用自定义协议 整体的流程: 客户端:发送端连接服务器,将要发送的数据通过编码器编码,发送。 服务端:启动、监听端口、接收连接

OkHttp简单使用学习总结

醉酒当歌 提交于 2020-10-23 11:43:40
start:2020年8月31日 一、前言 一直想学网络框架,这次终于尝到味道了。我先学的简单易懂的OkHttp,感觉用上它之后发送网络请求省事多了,上楼都不累了。将自己目前对OkHttp的理解写成博客,方便以后更深入的学习,同时也提供给需要的人参考。 二、What is OkHttp? Okhttp是安卓端非常火热的轻量级网络框架,它是一个处理网络请求的开源项目,是由移动支付Square公司贡献的。用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)(度娘提供) 相关网站: OkHttp官网 、 OkHttp_GitHub 三、增加开发依赖(AS) 在app路径下的 build.gradle配置文件中的 dependencies模块里增加以下代码(记得sync)(最新版本在 github 查看): implementation('com.squareup.okhttp3:okhttp:4.8.1') 四、发起请求流程 第一步:创建客户端 -> OkHttpClient 第二步:创建请求对象 -> Request 第三步:创建请求任务 -> Call 第四步:执行请求任务 -> 同步 execute() / 异步 enqueue(Callback) 五、发起Get请求 同步请求

PHP获取用户真实IP的正确姿势

﹥>﹥吖頭↗ 提交于 2020-10-22 17:46:18
目录 1.前言 2.打印服务器在不同状态下的捕捉情况 2.1百度CDN打印结果 2.2阿里CDN打印结果 2.3七云牛CDN打印结果 3.根据不同需求选择不同方案 1.前言 PHP如何获取用户的真实IP地址?如果看过一些入门教科书的朋友可能会记得,书上告诉我们使用如下方法获取: $_SERVER["REMOTE_ADDR"] ; 但是现实真的是如此吗?并不是,因为随着互联网的发展,我们访问的途径变得多种多样,用户可以使用代理IP代理访问、也可能通过CDN加速访问,那么你所获取的IP可能只是代理或者最近一个节点的IP,而不是真实用户的IP。 2.打印服务器在不同状态下的捕捉情况 根据下面的代码,我们可以得到各个CDN加速后的IP结果: <?php print_r($_SERVER); ?> 2.1百度CDN打印结果 Array ( [HTTP_X_FORWARDED_FOR] => 119.164.27.53,123.234.0.103,27.221.124.94 [HTTP_X_REAL_IP] => 119.164.27.53 [REMOTE_ADDR] => 150.138.138.169 ......... ) 2.2阿里CDN打印结果 Array ( [HTTP_ALI_CDN_REAL_IP] => 119.164.27.53 [HTTP_X_FORWARDED_FOR]

ASP.NET Core 奇技淫巧之接口代理转发

寵の児 提交于 2020-10-14 11:17:11
前言 先讲讲本文的开发背景吧.. 在如今前后端分离的大背景下,咱的客户又有要求啦~ 要前后端分离~ 然因为种种原因..没办法用用纯前端的框架(其实是学习成本高,又没钱请前端开发人员)... 所以最终决定了一种方案.. 那就是采用MVC(只处理前端视图层,单纯是为了托管在.net core上)+Webapi的方式来实现前后端分离(讲真,很奇葩).. 那么问题就随之而来了. 现在主流的前端框架都是托管在nodejs上,是通过axios来访问后端API,可以通过配置axios的代理配置(proxyTable)来实现跨域访问. 那么我们的JS运行在MVC上,托管在.net core上..那咋办呢?..没有现成的转发轮子..我们只有自己造了.. 所以这就是本篇的背景 - -.~ 正文 幸运的是ASP.NET Core 给我们提供了强大的中间件模式. 我们完全可以通过定义一个转发中间件的形式来实现代理接口转发,流程如图: 废话不多说,我们来创建我们的中间件: 一.创建检测约定URL的接口与实现 首先定义一个接口IUrlRewriter 用来检测我们的URL是否有对应前缀,如果有,则产生新的URL地址: 这里我们定义接口是为了方便以后更好的更换注入类来实现快速更换检测前缀的规则. public interface IUrlRewriter { Task <Uri> RewriteUri

我又踩坑了!如何为HttpClient请求设置Content-Type标头?

a 夏天 提交于 2020-10-09 18:52:08
最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=***&method=hmac content-type: application/json payload: { "token":"AA2917B0-C23D-40AB-A43A-4C4B61CC7C74"} 平台显示 :签名校验失败, 排查到平台收到的Post Payload并非预期,阅读本文,解锁正确使用Content-Type标头的姿势。 1. 入坑 下面是构造HttpClient对象、发起请求的代码: // 初始化HttpClientFactory context.Services.AddHttpClient("platform", c => { c.BaseAddress = new Uri("https://alpha-engage.demohost.com/"); c.DefaultRequestHeaders.Accept .Add(new MediaTypeWithQualityHeaderValue("application/json")); })... // 产生命名HttpClient,发起请求 var client = _clientFactory.CreateClient("platform"