net/http, req.Header.set("Host")不生效

hardes · 2016-11-10 02:35:12 · 4590 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2016-11-10 02:35:12 的主题,其中的信息可能已经有所发展或是发生改变。

遇到这样一个问题 req, err = http.NewRequest("GET", "http://x.x.x.x:80/", nil) req.Header.Set("Host", "example.com") 这样的http客户端,我抓到的报文里面,看到http头部的host字段居然还是x.x.x.x:80, 求大神指点


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4590 次点击  
加入收藏 微博
7 回复  |  直到 2019-09-16 13:15:13
baizhi
baizhi · #1 · 8年之前

example.com又不是你家的,你这是要当作参数传递过去吗

hardes
hardes · #2 · 8年之前
baizhibaizhi #1 回复

example.com又不是你家的,你这是要当作参数传递过去吗

我只是举个例子,真实的name不是这个

baizhi
baizhi · #3 · 8年之前
hardeshardes #2 回复

#1楼 @baizhi 我只是举个例子,真实的name不是这个

只要你的域名和ip绑定了的话肯定是可以的,req, err = http.NewRequest("GET", "http://x.x.x.x:80/", nil),这是XXXX换成域名就可以了,没有域名解析的话,修改一下自己电脑的host的文件。是要做cookies共享吗

hardes
hardes · #4 · 8年之前
baizhibaizhi #3 回复

#2楼 @hardes 只要你的域名和ip绑定了的话肯定是可以的,req, err = http.NewRequest("GET", "http://x.x.x.x:80/", nil),这是XXXX换成域名就可以了,没有域名解析的话,修改一下自己电脑的host的文件。是要做cookies共享吗

其实是想绕过DNS解析,直接指定IP来访问域名,结果因为Host字段不是name, 被这个域名的前端代理拦住了,返回的是403 forbidden, 使用req.Header.Set又没起作用

CarlJi
CarlJi · #5 · 8年之前

应该这么复制Req.Host="XXXX"。 详见:http://www.cnblogs.com/jinsdu/p/5161962.html

hardes
hardes · #6 · 8年之前
CarlJiCarlJi #5 回复

应该这么复制Req.Host="XXXX"。 详见:http://www.cnblogs.com/jinsdu/p/5161962.html

嗯,在net/http的doc里面看到type Request有Host这个成员,试了一把确实解决了问题

gangbeng
gangbeng · #7 · 5年之前

Req.Host="XXXX" 确定这样能修改吗,我这么修改之后,抓包的看到的请求的x.x.x.x:80也变成了域名

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传