Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot chain handlers? #141

Open
alexkingnz opened this issue Apr 20, 2020 · 0 comments
Open

Cannot chain handlers? #141

alexkingnz opened this issue Apr 20, 2020 · 0 comments

Comments

@alexkingnz
Copy link

If I try to chain handlers, things don't work. What am I doing wrong?

  1. With SocksiPyHandler first:
    opener = urllib.request.build_opener(SocksiPyHandler(socks.SOCKS5, "127.0.0.1", 1082), urllib.request.HTTPSHandler(context=myssl))
    opener.handlers
    [<urllib.request.UnknownHandler at 0x7efeddaa0438>,
    <urllib.request.HTTPDefaultErrorHandler at 0x7efeddaa04e0>,
    <urllib.request.HTTPRedirectHandler at 0x7efeddaa05c0>,
    <urllib.request.FTPHandler at 0x7efeddaa0588>,
    <urllib.request.FileHandler at 0x7efeddaa01d0>,
    <urllib.request.DataHandler at 0x7efeddaa0dd8>,
    <sockshandler.SocksiPyHandler at 0x7efeddaa0d68>,
    <urllib.request.HTTPSHandler at 0x7efeddaa0860>,
    <urllib.request.HTTPErrorProcessor at 0x7efeddaa0c88>]
    print(opener.open("https://172.22.255.172"))
    ....
    URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1056)>

So this is successfully using the proxy, but doesn't seem to be using the HTTPS handler which has a context that should ignore the self-signed certificate. My understanding is this is chained in the wrong order.

  1. With SocksiPyHandler second:
    opener = urllib.request.build_opener(urllib.request.HTTPSHandler(contet=myssl),SocksiPyHandler(socks.SOCKS5, "127.0.0.1", 1082))
    opener.handlers
    [<urllib.request.UnknownHandler at 0x7efedda557f0>,
    <urllib.request.HTTPDefaultErrorHandler at 0x7efedda552b0>,
    <urllib.request.HTTPRedirectHandler at 0x7efedda553c8>,
    <urllib.request.FTPHandler at 0x7efedda55be0>,
    <urllib.request.FileHandler at 0x7efedda55cc0>,
    <urllib.request.DataHandler at 0x7efedda55c88>,
    <urllib.request.HTTPSHandler at 0x7efedda55358>,
    <sockshandler.SocksiPyHandler at 0x7efedda55400>,
    <urllib.request.HTTPErrorProcessor at 0x7efedda55c50>]
    print(opener.open("https://172.22.255.172"))
    ...
    URLError: <urlopen error [Errno 110] Connection timed out>

The proxy is not being used, the connection is attempted directly instead of via the proxy, and times out.

How am I supposed to use this? Am I doing something wrong? Could do with more documentation about how to do this.

Note I'm trying to modify someone else's code which builds an opener with several handlers and puts a proxy handler at the end of the chain. And when I put a sockshandler.SocksiPyHandler at the end of the list it is not used, per #2 above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant