分享
go 写的http代理服务器
henry3695 · · 3458 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
可以看优酷视频,qq视频好像有点问题
package main
import (
"io"
"io/ioutil"
"log"
"net/http"
"os"
"fmt"
)
func handler(w http.ResponseWriter, r *http.Request) {
var (
resp *http.Response
data []byte
err error
)
r.RequestURI = ""
r.ParseForm()
resp, err = http.DefaultClient.Do(r)
if err != nil {
http.NotFound(w, r)
log.Println("1、NotFound")
return
}
data, err = ioutil.ReadAll(resp.Body)
if err != nil && err != io.EOF {
http.NotFound(w, r)
log.Println("2、NotFound")
return
}
for i, j := range resp.Header {
for _, k := range j {
w.Header().Add(i, k)
log.Println("Header:",i,"=",k)
}
}
for _,c := range resp.Cookies(){
w.Header().Add("Set-Cookie",c.Raw)
log.Println("Set-Cookie",c.Raw)
}
_, ok := resp.Header["Content-Length"]
if !ok && resp.ContentLength>0 {
w.Header().Add("Content-Length",fmt.Sprint(resp.ContentLength))
log.Println("1、Content-Length",resp.ContentLength)
}else{
log.Println("2、Content-Length",resp.Header["Content-Length"])
}
log.Printf("resp.StatusCode:%d len:%d\n",resp.StatusCode,len(data))
w.WriteHeader(resp.StatusCode)
w.Write(data)
}
func main() {
http.HandleFunc("/", handler)
log.Println("Start serving on port 8888")
http.ListenAndServe(":8888", nil)
os.Exit(0)
}有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3458 次点击
上一篇:PHP与Golang如何通信?
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
可以看优酷视频,qq视频好像有点问题
package main
import (
"io"
"io/ioutil"
"log"
"net/http"
"os"
"fmt"
)
func handler(w http.ResponseWriter, r *http.Request) {
var (
resp *http.Response
data []byte
err error
)
r.RequestURI = ""
r.ParseForm()
resp, err = http.DefaultClient.Do(r)
if err != nil {
http.NotFound(w, r)
log.Println("1、NotFound")
return
}
data, err = ioutil.ReadAll(resp.Body)
if err != nil && err != io.EOF {
http.NotFound(w, r)
log.Println("2、NotFound")
return
}
for i, j := range resp.Header {
for _, k := range j {
w.Header().Add(i, k)
log.Println("Header:",i,"=",k)
}
}
for _,c := range resp.Cookies(){
w.Header().Add("Set-Cookie",c.Raw)
log.Println("Set-Cookie",c.Raw)
}
_, ok := resp.Header["Content-Length"]
if !ok && resp.ContentLength>0 {
w.Header().Add("Content-Length",fmt.Sprint(resp.ContentLength))
log.Println("1、Content-Length",resp.ContentLength)
}else{
log.Println("2、Content-Length",resp.Header["Content-Length"])
}
log.Printf("resp.StatusCode:%d len:%d\n",resp.StatusCode,len(data))
w.WriteHeader(resp.StatusCode)
w.Write(data)
}
func main() {
http.HandleFunc("/", handler)
log.Println("Start serving on port 8888")
http.ListenAndServe(":8888", nil)
os.Exit(0)
}