Christian Heimes <li...@cheimes.de> added the comment:

It looks like the server is refusing requests that don't have an ALPN extension 
set in TLS layer. At first I though that the server may only support HTTP/2. 
The curl requests in your examples uses HTTP/2. urllib only supports HTTP/1.1 
and HTTP/1.0.

Then I tried "curl --http1.1 https://jitsi.molgen.mpg.de";. The request also 
succeeds because curl is sending "ALPN, offering http/1.1".

This request works for me:

>>> import ssl
>>> import urllib.request
>>> ctx = ssl.create_default_context()
>>> ctx.set_alpn_protocols(['http/1.1'])
>>> urllib.request.urlopen('https://jitsi.molgen.mpg.de', context=ctx)
<http.client.HTTPResponse object at 0x6040009b7960>

urllib could set the ALPN header by default when the user does not supply a 
custom context. It looks like curl always adds an ALPN extension. I don't see 
code in Python requests that sets ALPN extension. On the other hand Tom 
Christie's excellent httpx library does set ALPN extension just like curl.

----------
nosy: +christian.heimes

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40968>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to