首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: HTTP请求同时使用两个代理,并按定义的顺序进行

Python: HTTP请求同时使用两个代理,并按定义的顺序进行
EN

Stack Overflow用户
提问于 2021-09-29 16:05:21
回答 2查看 495关注 0票数 2

在Python中可以同时使用两个(或更多)代理发送HTTP请求吗?代理服务器的order matters!(附加信息:第一个代理是Socks5,需要身份验证。第二是HTTP,不包括auth)。

客户端-> Socks5代理服务器-> HTTP代理服务器->资源

请求库一次只允许一个代理:

代码语言:javascript
复制
import requests
from requests.auth import HTTPProxyAuth


url = 'http://example.com'

proxy_1 = {
    'http': 'socks5://host:port',
    'https': 'socks5://host:port'
}
auth = HTTPProxyAuth('user', 'password')

# second proxy is not accepted by requests api
# proxy_2 = {
#     'http': 'http://host:port',
#     'https': 'http://host:port'
# }

requests.get(url, proxies=proxy_1, auth=auth)

我需要所有这些来检查proxy_2在proxy_1后面是否在工作。也许有更好的方法做这件事?

EN

回答 2

Stack Overflow用户

发布于 2021-10-13 15:09:23

在python中执行代理链接的两种基本方法:

1修改了这个回答,以便在第一个代理需要auth时使用:

代码语言:javascript
复制
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    # creating connection to 1st proxy
    sock.connect((proxy_host, proxy_port))

    # connecting to 2nd proxy
    # auth creds are for the FIRST proxy while here you connect to the 2nd one
    request = b"CONNECT second_proxy_host:second_proxy_port HTTP/1.0\r\n" \
              b"Proxy-Authorization: Basic b64encoded_auth\r\n" \
              b"Connection: Keep-Alive\r\n" \
              b"Proxy-Connection: Keep-Alive\r\n\r\n"
    sock.send(request)
    print('Response 1:\n' + sock.recv(40).decode())

    # this request will be sent through chain of two proxies
    # auth creds are still for the FIRST proxy
    request2 = b"GET http://www.example.com/ HTTP/1.0\r\n" \
               b"Proxy-Authorization: Basic b64encoded_auth=\r\n" \
               b"Connection: Keep-Alive\r\n" \
               b"Proxy-Connection: Keep-Alive\r\n\r\n"
    sock.send(request2)
    print('Response 2:\n' + sock.recv(4096).decode())

2使用PySocks:

代码语言:javascript
复制
# pip install pysocks
import socks

with sock.socksocket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.setproxy(proxytype=socks.PROXY_TYPE_SOCKS5,
               addr="proxy1_host",
               port=8080,
               username='user',
               password='password')
    s.connect(("proxy2_host", 8080))

    message = b'GET http://www.example.com/ HTTP/1.0\r\n\r\n'
    s.sendall(message)
    response = s.recv(4069)
    print(response.decode())
票数 2
EN

Stack Overflow用户

发布于 2021-10-06 09:49:41

您可以尝试使用丙链

就像这样

代码语言:javascript
复制
proxychains4 python test.py
代码语言:javascript
复制
#test.py
import requests
r = requests.get("https://ipinfo.io/ip")
print(r.content)

或者查看的问题

此外,您可以尝试使用selenium代替请求,并使用web驱动程序设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69379897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档