美文网首页
网络代理对请求的影响

网络代理对请求的影响

作者: 知成 | 来源:发表于2024-03-18 20:46 被阅读0次

    下面仅以 clashX 举例

    背景

    在开启 clashX 时,通过 chrom 访问 https 是可以正常访问且能获取到数据。但是如果直接在终端使用 curl 或通过 go 语言写的 https 的请求都无法正常的进行访问请求。

    产生问题的原因

    经过测试发现 go 的请求代码以及 curl 直接在国外的服务器运行是可以做正常的访问请求的。说明本身发起请求的代码是没有问题的。那就只有一种情况,通过 curl 或 go 的代码请求流量没有走 clashX 代理。

    curl 的请求添加代理

    curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
    

    通过"--proxy"进行代理的配置

    经过测试是可以进行数据访问的。

    # 有用户名密码时
    export http_proxy="http://user:pwd@127.0.0.1:1234"
    export https_proxy="http://user:pwd@127.0.0.1:1234"
    # 没有用户名密码
    export http_proxy="http://127.0.0.1:1234"
    export http_proxy="http://127.0.0.1:1234"
    
    # 上面的设置用于全局代理,如果不需要刻意使用 unset 删除
    unset http_proxy
    unset https_proxy
    

    go 发送请求走代理

    go 的请求需要走代理的时候,需要配置 client 的 Transport
    一下是实际代码示例:

    package main  
      
    import (  
        "fmt"  
        "io"    
        "net/http"    
        "net/url"
    )
    
    func main(){
        proxyUrl, err := url.Parse("http://127.0.0.1:7890")  
        if err != nil {  
            fmt.Println(err)  
            return  
        }  
        transport := &http.Transport{  
            Proxy: http.ProxyURL(proxyUrl),  
        }  
        client := &http.Client{  
            Transport: transport,  
        }  
        url1 := "https://api.themoviedb.org/3/movie/changes?page=1"  
        req, _ := http.NewRequest("GET", url1, nil)  
      
        req.Header.Add("accept", "application/json")   
      
        res, err := client.Do(req) //  
        if err != nil {  
            fmt.Println(err)  
            return  
        }  
        defer res.Body.Close()
        body, err := io.ReadAll(res.Body)  
        if err != nil {  
            fmt.Println(err)  
            return  
        }  
        fmt.Println(string(body))
    }
    

    以上代码中通过向,client 添加 Transport 字段来进行代理的配置;

    相关文章

      网友评论

          本文标题:网络代理对请求的影响

          本文链接:https://www.haomeiwen.com/subject/lsszzdtx.html