Golang实现HTTP代理服务

这篇文章的目的是教大家如何使用Go语言实现一个简单的HTTP代理服务程序;HTTP代理服务就是转发客户端发送的网络请求到远程服务器,得到远程服务器的响应后将响应内容返回给客户端。

go 代理

使用Go语言中的标准库net/http来实现;

代码如下:

package main
import (
    "io"
    "log"
    "net/http"

)

func handleHTTP(w http.ResponseWriter, req *http.Request) {
    resp, err := http.DefaultTransport.RoundTrip(req)
    if err != nil {
        http.Error(w, err.Error(), http.StatusServiceUnavailable)
        return
    }
    defer resp.Body.Close()
    copyHeader(w.Header(), resp.Header)
    w.WriteHeader(resp.StatusCode)
    io.Copy(w, resp.Body)
}
func copyHeader(dst, src http.Header) {
    for k, vv := range src {
        for _, v := range vv {
            dst.Add(k, v)
        }
    }
}

func main() {

    server := &http.Server{
        Addr: "127.0.0.1:8080",
        Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            handleHTTP(w, r)
        }),
    }

    log.Fatal(server.ListenAndServe())
}

测试

写了一段python代码,用于测试代理服务程序:

import requests

url = "http://baidu.com"

proxies = {'http':"127.0.0.1:8080"}

resp = requests.get(url,proxies=proxies)

print(resp.status_code)
print(resp.text)

程序运行结果:

200
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/how-to-create-a-http-proxy-service.html

分类: 计算机技术
推荐阅读:
Python将数转换为带有千位分隔符的形式 在这篇文章中,我们使用Python将一个数转换为带有千位分隔符的形式;
Python all()函数 all()是Python内置函数之一,它接收一个可迭代对象,如果可迭代对象中的所有元素都为真值(非零、非空、非None等),则返回True,否则返回False。
Python enumerate()函数 在Python中,enumerate()是一个内置函数,用于将一个可迭代对象转换为一个枚举对象,该对象包含每个元素的索引和对应的值。enumerate()函数返回的是一个由元组组成的迭代器,每个元组包含两个元素,第一个元素是元素的索引,第二个元素是元素的值。
PySide6 QWidget更改窗口标题 PySide6.QtWidgets.QWidget类的成员函数setWindowTitle()用于为窗口更改标题;
Windows和Linux系统启用IP转发 在Windows系统下启用IP转发,需要通过修改注册表来实现;Linux系统只需将系统下的/proc/sys/net/ipv4/ip_forward文件值修改为1;
Python实现猜拳小游戏 曾经给一个小屁孩做的作业,放出来分享。。。实现思路: 定义一个玩家类;实现获取用户的输入。 定义一个机器人类;实现机器人的输入。 定义一个裁判类;裁判判断双方胜负。 定义游戏桌面;实现游戏的启动和管理。