当前位置: 首页 > 面试题库 >

如何使用Python请求库禁用cookie处理?

骆照
2023-03-14
问题内容

当我使用访问URL的请求时, cookie会自动发送回服务器
(在下面的示例中,所请求的URL设置了一些cookie值,然后重定向到另一个显示存储的cookie的URL)

>>> import requests
>>> response = requests.get("http://httpbin.org/cookies/set?k1=v1&k2=v2")
>>> response.content
'{\n  "cookies": {\n    "k2": "v2",\n    "k1": "v1"\n  }\n}'

是否可以通过将Chrome或Firefox设置为不接受Cookie的方式来临时禁用Cookie处理?

例如,如果我在禁用了cookie处理的情况下使用Chrome访问上述URL,则会得到我期望的结果:

{
  "cookies": {}
}

问题答案:

您可以通过定义Cookie政策来拒绝所有Cookie来做到这一点:

from http import cookiejar  # Python 2: import cookielib as cookiejar
class BlockAll(cookiejar.CookiePolicy):
    return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False
    netscape = True
    rfc2965 = hide_cookie2 = False

(请注意,http.cookiejarAPI要求您定义一堆属性和方法,如图所示。)

然后,在“请求”会话中设置Cookie策略:

import requests
s = requests.Session()
s.cookies.set_policy(BlockAll())

现在它将不存储或发送cookie:

s.get("https://httpbin.org/cookies/set?foo=bar")
assert not s.cookies

顺便说requests一句,如果您查看代码,则包中的便捷方法(而不是requests.Session对象上的便捷方法)Session每次都会构造一个新方法。因此,Cookie不会在单独的调用之间保留requests.get。但是,如果第一页设置cookie,然后发出HTTP重定向,则目标页面将看到cookie。(这是HTTPBin/cookies/set调用发生的情况,该调用重定向到/cookies。)

因此,根据您要重定向的行为,您可能不需要执行任何特殊操作。比较:

>>> print(requests.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {'foo': 'bar'}}
>>> print(requests.get("https://httpbin.org/cookies").json())
{'cookies': {}}

>>> s = requests.Session()
>>> print(s.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {'foo': 'bar'}}
>>> print(s.get("https://httpbin.org/cookies").json())
{'cookies': {'foo': 'bar'}}

>>> s = requests.Session()
>>> s.cookies.set_policy(BlockAll())
>>> print(s.get("https://httpbin.org/cookies/set?foo=bar").json())
{'cookies': {}}
>>> print(requests.get("https://httpbin.org/cookies").json())
{'cookies': {}}


 类似资料:
  • 问题内容: 我试图打开登录页面(GET),获取网络服务器提供的cookie,然后提交用户名和密码对以登录网站(POST)。 看着这个Stackoverflow问题/答案,我认为我会做以下事情: 但是,标头中有一个,但该对象中没有改变。实际上,链接问题的回答将表明没有内容被填充。 我在代码中通过使用标头字典来解决此问题,并在执行GET或POST之后使用此标头处理: 然后在请求方法中传递标头。这是正确

  • 我正在使用OkHttpClient向网站的网页url发送请求,并通过以下方法存储它提供的cookie,我仅从stackoverflow获得该方法。 有必要存储cookie,否则网站会将请求重定向到超时页面。 然后,我看到页面的html来检查我是否到达了正确的网址。 现在,我以类似于网址“www.example.com/loginPage”的方式制作另一个请求变量,并尝试查看html,但它将我重定向

  • 问题内容: 我正在尝试使用Python访问poloniex.com(一种加密货币交易所)上的交易API。为此,我必须遵循以下规定: 所有对交易API的调用都通过HTTP POST发送到https://poloniex.com/tradingApi,并且必须包含以下标头: 密钥-您的API密钥。 签名-根据HMAC-SHA512方法,由您的键的“秘密”对查询的POST数据进行签名。 此外,所有查询都

  • 问题内容: 我正在使用以下网址: 正如我在“ myserver.com”的“ access.log”中看到的那样,使用了客户端的系统代理。但是我想完全禁止使用代理。 问题答案: 我目前了解的 完全 禁用代理的唯一方法是: 建立会议 设置于 使用该会话创建您的请求 import requests session = requests.Session() session.trust_env = Fal

  • 问题内容: 我一直在努力解决这个问题几天。根据CORS请求设置Cookie。我看到了相互矛盾的文章和答案,有人说,只要XHR请求设置为true,并且服务器发送适当的标头,浏览器就应该尊重标头。但是,在我的测试中情况并非如此。 示例代码: index.js(Node.js服务器) cookies.html 我已经尝试在Firefox Developer Edition和Chrome上对此进行测试,除

  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO