How to get the webpage with socks5 proxy in python3?
Length Power
elearn2014 at gmail.com
Fri Sep 22 21:34:43 EDT 2017
sudo lsof -i:1080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sslocal 1795 root 4u IPv4 16233 0t0 TCP localhost:socks
(LISTEN)
sslocal 1795 root 5u IPv4 16234 0t0 UDP localhost:socks
An app was listening on localhost:1080,it is ready for curl's socks5
proxy.
The app provided socks5 proxy service is shadowsocks client on my pc.
curl can work with socks proxy in my pc.
target="target_url_youtube"
curl --socks5-hostname 127.0.0.1:1080 $target -o /tmp/sample
The target url can be downloaded with scoks5 proxy in curl.
shadowsocks client------->shadowsocks server--->target_url_youtube
127.0.0.1:1080 1xx.1xx.1xx.1xx:port target_url_youtube
Notice:
All the packages from 127.0.0.1:1080 to 1xx.1xx.1xx.1xx:port is sent and
received by shadowsocks client and server.
curl just sent packages to 127.0.0.1:1080.
Now i want to get the target webpage with socks proxy in python3.
the first try :
import urllib.request
target="target_url_youtubr"
proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
web = urllib.request.urlopen(target).read()
print(web)
The error info:
sock.connect(sa)
OSError: [Errno 101] Network is unreachable
Notice:
It is no use to write {'sock5': 'localhost:1080'} as {'sock5':
'127.0.0.1:1080'},i have verified it.
the second try:
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 1080)
socket.socket = socks.socksocket
import urllib.request
target="target_url_youtubr"
print(urllib.request.urlopen('target').read())
error info:
raise BadStatusLine(line)
http.client.BadStatusLine:
The third try:
import socks
import socket
from urllib import request
socks.set_default_proxy(socks.SOCKS5, "localhost", 1080)
socket.socket = socks.socksocket
target="target_url_youtube"
r = request.urlopen(url)
print(r.read())
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:600)
urllib.error.URLError: <urlopen error EOF occurred in violation of
protocol (_ssl.c:600)>
Why data packet can't send via localhost:1080 and get the
target_url_youtube's content,but curl can?
How to fix my python3 code for socks5 proxy?
shadowsocks client---------->shadowsocks server------>target_url_youtube
127.0.0.1:1080 1xx.1xx.1xx.1xx:port target_url_youtube
`curl --socks5-hostname 127.0.0.1:1080 $target -o /tmp/sample` can do
the job.
why all the three python codes can't do?
How to fix it?
More information about the Python-list
mailing list