python-hyper / hyper

HTTP/2 for Python.
http://hyper.rtfd.org/en/latest/
MIT License
1.05k stars 191 forks source link

How to https? #408

Open peterbe opened 5 years ago

peterbe commented 5 years ago

Consider

from hyper import HTTPConnection
c = HTTPConnection('www.peterbe.com')
c.request('GET', '/')
resp = c.get_response()
print(resp.status)
print(resp.headers['location'])

Output becomes:

301
[b'https://www.peterbe.com/']

That's like doing curl -v http://www.peterbe.com which will also respond with:

< HTTP/1.1 301 Moved Permanently
< Server: cloudflare-nginx
< Date: Wed, 24 Apr 2019 13:32:25 GMT
< Content-Type: text/html
< Content-Length: 162
< Connection: keep-alive
< Location: https://www.peterbe.com/

I think the problem is that http://www.peterbecom is HTTP/1.1 whereas https://www.peterbe.com is HTTP/2. ...if that matters.

peterbe commented 5 years ago

PS the immediate "solution" is to do it like this instead:

-c = HTTPConnection('www.peterbe.com',)
+c = HTTPConnection('www.peterbe.com', port=443)

then it works as expected. Clunky though. That's why I think this issue should stay open till it's less clunky.

The documentation says:

By default, all HTTP/2 connections are made over TLS.
peterbe commented 5 years ago

@Asmeble How does that help when trying to use hyper?

Also, how is that different from regular requests?