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?
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to