使用请求模块正确分配cookie

时间:2019-07-03 16:16:42

标签: python python-requests session-cookies

  
    

我找到了解决我的语法错误的方法,但是我不明白为什么原始代码不起作用。

  

我尝试了多个不同的模块,例如urllibrequests甚至是sockets。但是我被引导使用requests来简化和提高准确性。我不想透露很多信息,因为这对HTB来说是一个挑战,但是我伸出援手的人也只是告诉我“你们的语法看起来还不错”,也无济于事。如果由于扰流板而需要删除帖子,我会立即删除。

以下代码片段对您有效

import requests
import hashlib
s = requests.session()
url = 'someURL'
r = s.get(url)
cookie = s.cookies.get_dict() ##CHANGING THIS WORKED
x = r.text[167:187] #grabbing specific string
a = hashlib.md5(x.encode('utf-8')).hexdigest() ### CHANGING THIS WORKED
# b = s.post(url, data=a, cookies={'PHPSESSID': '{cookie}'})
final = s.post(url, data={'hash':a}, cookies=cookie)
print(final.text)

我希望在请求期间将PHPSESSID以cookie形式传递回服务器。上面的语法有效,但是这不行...

import requests
import hashlib
s = requests.session()
url = 'someURL'
r = s.get(url)
cookie = s.cookies['PHPSESSID']
x = r.text[167:187]
h = hashlib.md5()
h.update(x)
a = h.hexdigest()
b = s.post(url, data=a, cookies={'PHPSESSID': '{cookie}'})
print(b.text)

如果我想给自己分配一个cookie,该怎么办?我不了解get_dict()的工作方式,而另一个却没有。

1 个答案:

答案 0 :(得分:0)

  

在这两种情况下,cookie实际上都可以正确传递。主要区别在于hashlib模块处理unicode-objects的方式。

解决方案 因为x是一个unicode对象,所以我必须先对其进行编码,然后再将其发送到hexdigest() 这就是为什么

h = hashlib.md5(x.encode('utf-8')).hexdigest()

有效,而其他无效。只需对x进行编码即可。