hyper icon indicating copy to clipboard operation
hyper copied to clipboard

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

Open Margesh92 opened this issue 7 years ago • 12 comments

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

Margesh92 avatar Oct 14 '18 21:10 Margesh92

I have the same issue, did you solve it?

BarryThrill avatar Apr 26 '19 23:04 BarryThrill

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

zjcnew avatar May 25 '19 09:05 zjcnew

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

user223989 avatar Jun 03 '19 17:06 user223989

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

xCuri0 avatar Jul 23 '19 09:07 xCuri0

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 avatar Jul 31 '19 20:07 crablab

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

xCuri0 avatar Aug 01 '19 07:08 xCuri0

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:

crablab avatar Aug 01 '19 10:08 crablab

https://github.com/python-hyper/hyper/pull/405 appears to fix this issue in both Python2 and Python3.

divinehawk avatar Dec 05 '19 03:12 divinehawk

@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 avatar Apr 14 '20 12:04 paulzaf1992

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

paulzaf1992 avatar Apr 24 '20 15:04 paulzaf1992

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 avatar May 08 '20 13:05 xingzhisg

@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

paulzaf1992 avatar May 08 '20 16:05 paulzaf1992