Yes, you can use urllib3
with a SOCKS proxy, but it requires an additional library to enable SOCKS support because urllib3
by itself does not provide direct SOCKS proxy capabilities. You will need to use the PySocks
library (or socksipy-branch
) to patch the socket
module to enable SOCKS proxy support.
First, you need to install the required packages if you haven't already:
pip install urllib3
pip install pysocks
Once you have PySocks
installed, you can use it to create a SOCKS proxy connection. Here's an example of how to use urllib3
with a SOCKS proxy:
import socks
import socket
from urllib3 import PoolManager
from urllib3.contrib.socks import SOCKSProxyManager
# Configure the SOCKS proxy (e.g., SOCKS5 proxy on localhost port 9050)
socks.set_default_proxy(socks.SOCKS5, "localhost", 9050)
socket.socket = socks.socksocket
# Or create a SOCKSProxyManager directly with the desired SOCKS proxy URL
http = SOCKSProxyManager("socks5://localhost:9050/")
# Now you can use http.request to make your requests via the SOCKS proxy
response = http.request('GET', 'http://example.com/')
print(response.data)
Please note that SOCKSProxyManager
is part of urllib3.contrib
, indicating that it's a contributed module and might not have the same level of support or stability as the core features.
Keep in mind that using a proxy may affect the way you handle SSL/TLS certificates. If you're using HTTPS URLs, you may need to pass additional parameters to the SOCKSProxyManager
to handle the SSL verification.
Always be aware of the legal and ethical considerations when using proxies and web scraping. Ensure that your actions comply with the terms of service of the website and the laws of the relevant jurisdictions.