https://github.com/seahoh/extproxy
ExtProxy extend urllib2's ProxyHandler to support extra proxy types: HTTPS, SOCKS. It provides a consistent user experience like HTTP proxy for the users.
https://github.com/seahoh/extproxy
https proxyhandler socks urllib
Last synced: 6 months ago
JSON representation
ExtProxy extend urllib2's ProxyHandler to support extra proxy types: HTTPS, SOCKS. It provides a consistent user experience like HTTP proxy for the users.
- Host: GitHub
- URL: https://github.com/seahoh/extproxy
- Owner: SeaHOH
- License: mit
- Created: 2019-12-12T14:46:52.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-08-23T07:59:38.000Z (over 2 years ago)
- Last Synced: 2025-06-16T17:59:15.186Z (7 months ago)
- Topics: https, proxyhandler, socks, urllib
- Language: Python
- Size: 34.2 KB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ExtProxy
[](https://github.com/SeaHOH/extproxy/blob/master/LICENSE)
[](https://github.com/SeaHOH/extproxy/releases)
[](https://github.com/SeaHOH/extproxy)
ExtProxy extend urllib2's ProxyHandler to support extra proxy types: HTTPS, SOCKS. It provides a consistent user experience like HTTP proxy for the users.
This script is using a non-side-effects monkey patch, it did not applied to build-in module socket, just inject some codes into `Request`, `ProxyHandler`, `HTTPConnection`, `SSLContext` method's processing. Don't need to worry about the patching, you can using everything like before, or you can unpatch it at any time.
# Installation
Install from
[](https://pypi.org/project/ExtProxy/)
[](https://pypi.org/project/ExtProxy/#files)
[](https://pypi.org/project/ExtProxy/#files)
pip install ExtProxy
Or download and Install from source code
python setup.py install
# Compatibility
- Python >= 2.7
- Require PySocks to support SOCKS proxy type
# Usage
```py
# Target can be imported before monkey patching
from urllib.request import urlopen, build_opener, ProxyHandler
# Import extproxy, auto apply monkey patching by `extproxy.patch_items`
import extproxy
# Use origin HTTP proxy
proxy = "http://127.0.0.1:8080"
# Use HTTPS proxy, use `set_https_proxy` to custom proxy's SSL verify mode
import ssl
proxy = "https://127.0.0.1:8443"
cafile = "cafile path"
set_https_proxy(proxy, check_hostname=False, cafile=cafile)
context_settings = {
"protocol": ssl.PROTOCOL_TLSv1_2,
"cert_reqs": ssl.CERT_REQUIRED, #
"check_hostname": True, #
"cafile": "cafile path", #
"capath": "cafiles dir path", #
"cadata": b"ca data" # Uesd to server auth
"certfile": "certfile path", #
"keyfile": "keyfile path", # Uesd to client auth
}
context = ssl._create_unverified_context(**context_settings)
... # More custom settings
set_https_proxy(proxy, context=context)
# Use SOCKS proxy, `socks` can be: socks, socks4, socks4a, socks5, socks5h
# SOCKS4 does not support remote resolving, but SOCKS4a/5 supported
# 'socks' means SOCKS5, 'socks5h' means do not use remote resolving
proxy = "socks://127.0.0.1:1080"
# Set proxy via system/python environment variables
import os
os.environ["HTTP_PROXY"] = proxy
os.environ["HTTPS_PROXY"] = proxy
print(urlopen("https://httpbin.org/ip").read().decode())
# Set proxy via ProxyHandler
opener = build_opener(ProxyHandler({
"http": proxy,
"https": proxy
}))
print(opener.open("https://httpbin.org/ip").read().decode())
# Restore monkey patch, then HTTPS, SOCKS proxy use can not continue working
extproxy.restore_items()
```
# License
ExtProxy is released under the [MIT License](https://github.com/SeaHOH/extproxy/blob/master/LICENSE).