使用User-Agent防止HttpClient发送http请求时403 Forbidden和安全拦截
问题的抛出
今天有客户反映,批付交易完成后,在我方服务器以“服务器点对点通信”的方式通知请求对方服务器时,对方拦截了请求。并贴了一张截图。

从截图可以看出来,对方拦截了我们的user-agent(Apache-HttpClient)。
什么是User-Agent?
通常我们用浏览器访问一个网页,当我们向服务器发送请求时,浏览器会将一些头信息附加上,然后发给服务器,其中就包括User-Agent。一些网站的网页,为了防止爬虫或恶意访问,会首先判断请求头的User-Agent,如果不是浏览器请求,则会直接拒绝请求。(https://blog.csdn.net/frankcheng5143/article/details/54096098里也提到,直接用HttpClient发起请求csdn时,会收到403 Forbidden)
不同版本的谷歌浏览器的User-Agent:
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)

解决问题
通过分析httputil代码,发现我方并未设置请求头的user-agent属性。 原来,经模拟点对点请求的测试证明,如果不设置的话,它的值默认是:Apache-HttpClient。
技术支持同事为了照顾客户的感受,建议我方改一下。那么,自然是加上user-agent来模拟正常的浏览器请求客户服务器就可以了。
当然,单从技术角度来看,另一个同事的给的建议也许更好:因为这是个服务器点对点通信,所以若要从安全方面控制,应该通过诸如ip白名单的方式,而不是通过User-Agent判断是不是浏览器请求。
httputil代码(user-agent不区分大小写):
String userAgent = "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36";
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("User-Agent",userAgent);
response = httpclient.execute(httpGet);
CloseableHttpClient httpClient = getHttpClient();
。。。。。
HttpPost post = new HttpPost(url);
post.setHeader("user-agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
CloseableHttpResponse httpResponse = httpClient.execute(post);
URL urls = new URL(url);
HttpURLConnection uc = (HttpURLConnection) urls.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
。。。
uc.setRequestMethod("POST");
。。。
使用User-Agent防止HttpClient发送http请求时403 Forbidden和安全拦截的更多相关文章
- 解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式
众所周知前端向后台发送 post 请求时,必须验证 csrf,否则会报错 403 Forbidden.使用 Django Form 表单可以直接在表单里面添加 {% csrf_token %} 即可, ...
- httpclient发送request请求时设置header和timeout
package com.xxx.xxx.common; import java.io.BufferedReader; import java.io.InputStreamReader; import ...
- 【JAVA】通过HttpClient发送HTTP请求的方法
HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...
- Httpclient发送json请求
一.Httpclient发送json请求 public String RequestJsonPost(String url){ String strresponse = null; try ...
- .net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包
前言: 通过Fiddler抓取浏览器请求数据,相信大家已经都会用了,我们知道Fiddler是通过在本机计算器添加一个默认的代理服务器来实现的抓包数据的,端口号为:8888. 其实当我们打开Fiddl ...
- Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method 'POST' not supported (附带其余好几个坑)
yml: feign: httpclient: enabled: true properties: #feign feign.httpclient.enabled=true <!-- https ...
随机推荐
- Android 插件化开发(一):Java 反射技术介绍
写在前面:学习插件化开发推荐书籍<Android 插件化开发指南>,本系列博客所整理知识部分内容出自此书. 在之前的项目架构的博文中,我们提到了项目插件化架构,提到插件化架构不得不提的到J ...
- 写完代码就去吃饺子|The 10th Henan Polytechnic University Programming Contest
河南理工大学第十届校赛 很久没有组队打比赛了,好吧应该说很久没有写题了, 三个人一起玩果然比一个人玩有趣多了... 前100分钟过了4题,中途挂机100分钟也不知道什么原因,可能是因为到饭点太饿了?, ...
- canves做的时钟目前已经开源
canves做的时钟目前已经开源 git地址: https://github.com/jidanji/canves-clock/tree/1.0.1 项目截图 时流过的时间变得有颜色,其他的没有颜色.
- 【解决】[Firmware Bug]: TSC_DEADLINE disabled due to Errata......starting timeout scripts
问题一.[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x52 (o ...
- asp.net MVC 在Controller控制器中实现验证码输出
asp.net mvc项目使用到验证码,为了让以前的WebForm代码能利用上代码经过稍微的改动即可使用代码如下: using System; using System.Collections.Gen ...
- 关于Fastjson 1.2.24 反序列化导致任意命令执行漏洞
环境搭建: sudo apt install docker.io git clone https://github.com/vulhub/vulhub.git cd vulhub fastjson 1 ...
- 软工第八次实验——Git
hiahiahia我又来作恶了,莫名其妙的第八次实验还要更新! 文章目录 一.Git 1.1 概述 1.1.1 Git 1.1.2 分布式版本控制系统 1.1.3 指令集 1.2 版本控制系统 1.2 ...
- ORA-17627: ORA-12577:关于文件存储满的问题
问题描述:搭建DG的时候,要rman从orcl恢复到orclstd数据库来,dup复制了半天,结果最后报错:ORA-17627: ORA-12577: Message 12577 not found; ...
- navicat for mysql 连接 mysql 出现Client does not support authentication protocol requested by server解决方案
一 .桌面左下角windows图标--搜索框内输入cmd,结果如图所示,点击cmd.exe,或者使用快捷键Windows键(在键盘上有个Windows标志的按键)+R输入cmd后回车. 二. 在出来的 ...
- Cocos2d-x 点击菜单按键居中放大(无需修改底层代码)
建议转至该处阅读 https://www.zybuluo.com/tangyikejun/note/21953 配置环境:win7+Cocos2d-x.2.0.3+VS2012 目标读者:已经了解Co ...