Skip to content

Cannot chain handlers? #141

Open
Open

Description

@alexkingnz

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions