hyper
hyper copied to clipboard
Using hyper.contrib.HTTP20Adapter with requests.session ignores set-cookie header and does not set cookies.
I am using hyper.contrib.HTTP20Adapter with requests in python. When session is started with requests (with HTTP20Adapter) and url is fetched, it does not set cookies as per 'set-cookie' header. So, session.cookies.get_dict() returns an empty dict {}.
I have the same issue, did you solve it?
I urgently hope to support the automatic management of request and response cookies as soon as possible.
Is there any workaround for this? I have just come across the issue and it is a game breaking problem!
Same issue. I've confirmed I'm actually receiving the cookies since I can see set-cookie in Wireshark
This is in #393 but hasn't been merged :thinking:
I have this same problem so it would be nice if it could be fixed!
@Lukasa? :pray:
@crablab that fix does not work correctly. it doesn't add all the cookies i see in wireshark
It is a bit of a dumster fire to be honest :fire:
I might have a look at fixing this myself but I've never looked at the Hyper source before so :man_shrugging:
https://github.com/python-hyper/hyper/pull/405 appears to fix this issue in both Python2 and Python3.
@divinehawk I have applied the #405 fix but still no luck...
Specifically, what I 'm doing is that I mount hyper.contrib.HTTP20Adapter to a requests.Session in python3 and I am trying to get a specific cookie from the RequestsCookieJar of the response.
However, despite the fact that the response headers contain several 'Set-Cookie' headers, the CookieJar remains empty.
I also added debug messages inside the FakeOriginalResponse.get_all() method in order to see the contents of the "values" variable that this method returns. I see that "values" contains all of the "Set-Cookie" cookies' values.
Am I missing something else?
Just came up with a solution.
In the #405 fix I simply replaced the line
if n.decode('utf-8') == name.lower():
with:
if n.decode('utf-8').lower() == name.lower():
because I noticed that wihout it, the if was never true.
And finally I placed the call to extract_cookies_to_jar() right before the return statement because its final argument needs the information we fake. So instead of calling it like
extract_cookies_to_jar(response.cookies, request, response)
I called it like:
extract_cookies_to_jar(response.cookies, request, response.raw)
Hope this saves someone the 4 weeks I lost over this...
If I get it right, the HTTP/2 specification (RFC7540 8.1.2 HTTP Header Fields) requires all field names to be in lowercase, so n.decode('utf-8').lower() is not necessary here.
@xingzhisg that's what I thought as well and actually this is why it took me 4 weeks to solve this. I just happened to check this out of dispair, in order to be sure that it wasn't creating any problems. And after I checked that it works with it, I then reverted back and cross-checked that it failed without lower() in order to be 100% sure.
I may have been missing something all along and I 'd appreciate any thoughts on it