使用 SOCKS 代理发出 HTTP 请求

Posted

技术标签:

【中文标题】使用 SOCKS 代理发出 HTTP 请求【英文标题】:Make a HTTP request using SOCKS Proxy 【发布时间】:2021-10-03 03:50:48 【问题描述】:

我正在尝试使用 SOCKS5 代理发出 HTTP(s) 请求。我有以下代码,执行时会抛出错误。

代码:

package main

import (
    "crypto/tls"
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
)

const (
    PROXY_ADDR = "socks5://175.101.15.35:84"
    URL        = "https://api.ipify.org?format=json"
)

func main() 
    url_i := url.URL
    url_proxy, _ := url_i.Parse(PROXY_ADDR)

    transport := http.Transport
    transport.Proxy = http.ProxyURL(url_proxy)                        // set proxy
    transport.TLSClientConfig = &tls.ConfigInsecureSkipVerify: true //set ssl
    client := &http.ClientTransport: &transport
    // client.Transport = &http.TransportProxy: http.ProxyURL(url_proxy)
    resp, err := client.Get(URL)
    if err != nil 
        fmt.Println(err.Error())
    
    responseBody, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(responseBody))

错误:

Get "https://api.ipify.org?format=json": proxyconnect tcp: dial tcp 175.101.15.35:84: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x40 pc=0x82c909]

goroutine 1 [running]:
main.main()
        C:/Users/XXX/main.go:29 +0x189
exit status 2

互联网连接良好,我已经尝试了上述代码的其他替代方案,但它们似乎都不起作用。

请帮忙。

【问题讨论】:

它说它无法连接到给定的代理地址。如果 Internet 连接本身是否正常,这无关紧要 - 如果代理未启动、无法访问,或者您提供了错误的代理地址,那么与代理的连接仍然会失败。 【参考方案1】:

正如错误消息所说,从这一行开始,err 不是 nil

resp, err := client.Get(URL)
if err != nil 
    fmt.Println(err.Error())
    return // need to exit here, because there is nothing in response

请检查端点 175.101.15.35:84 的可达性

【讨论】:

以上是关于使用 SOCKS 代理发出 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SOCKS 代理通过 aiohttp 发出请求?

通过 SOCKS 协议的 HTTP 请求

Socks5代理是啥意思?

http代理和SOCKS5代理的区别是啥?

http代理和SOCKS5代理的区别

如何通过 socks 代理使 python 请求工作