【Charles】MapRemote和修改本机hosts文件的区别

问题描述:

环境

  • windows 10 专业版
  • Charles 4.6.1

场景

目前项目中通过Charles代理将移动端请求代理到PC机,然后通过修改PC机的hosts文件进公司的灰度环境。Charles中抓到的请求如下图,https://work.xxx.com/ 访问的远端地址是42.194.154.121:443,即我们在hosts文件中配置的地址

42.194.154.121 work.xxx.com

问题

因为不想不断的修改hosts文件,所以想借助Charles的MapRemote功能,实现请求转发的目的,MapRemote配置如下
image
Charles拦截到请求后进行了转发,如下图,但是最终和修改hosts文件得到的接口响应不一样

帖中的问题已解决

解决方案

在Charles中配置MapRemote时勾选“Preserve host in hear fields”,默认是不勾选的

Preserve host in hear fields 即在转发时会带上原始请求的host请求头,如下图:
image

上图是勾选了的,下图是未勾选的,同样都进行了转发,但是上图带上了原始请求头的host,效果与修改hosts文件一致

疑问

目前猜测是后端进行了host校验?

我猜也是host进行校验了,或者你可以看看head里面有没有类似host或referer的参数,顺便改一下试试