Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Using hyper.contrib.HTTP20Adapter with requests.session ignores set-cookie header and does not set cookies. #392

Open
Margesh92 opened this issue Oct 14, 2018 · 12 comments

Comments

@Margesh92
Copy link

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 {}.

@BarryThrill
Copy link

I have the same issue, did you solve it?

@zjcnew
Copy link

zjcnew commented May 25, 2019

I urgently hope to support the automatic management of request and response cookies as soon as possible.

@user223989
Copy link

Is there any workaround for this? I have just come across the issue and it is a game breaking problem!

@xCuri0
Copy link

xCuri0 commented Jul 23, 2019

Same issue. I've confirmed I'm actually receiving the cookies since I can see set-cookie in Wireshark

@crablab
Copy link

crablab commented Jul 31, 2019

This is in #393 but hasn't been merged 🤔

I have this same problem so it would be nice if it could be fixed!

@Lukasa? 🙏

@xCuri0
Copy link

xCuri0 commented Aug 1, 2019

@crablab that fix does not work correctly. it doesn't add all the cookies i see in wireshark

@crablab
Copy link

crablab commented Aug 1, 2019

It is a bit of a dumster fire to be honest 🔥

I might have a look at fixing this myself but I've never looked at the Hyper source before so 🤷‍♂️

@divinehawk
Copy link

divinehawk commented Dec 5, 2019

#405 appears to fix this issue in both Python2 and Python3.

@paulzaf1992
Copy link

@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?

@paulzaf1992
Copy link

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...

@xingzhisg
Copy link

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.

@paulzaf1992
Copy link

@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

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

No branches or pull requests

9 participants