【问题标题】:Python Requests Recreate Post Request with CookiesPython 请求使用 Cookie 重新创建发布请求
【发布时间】:2015-07-29 06:09:41
【问题描述】:

所以我正在查看我的 chrome 控制台以查找我正在发出的发布请求,并且在包含此数据的头文件中有一个“cookie”值:

strTradeLastInventoryContext=730_2; bCompletedTradeOfferTutorial=true; steamMachineAuth76561198052177472=3167F37117************B82C2E; steamMachineAuth76561198189250810=E292770040E************B5F97703126DE48E; rgDiscussionPrefs=%7B%22cTopicRepliesPerPage%******%7D; sessionid=053257f1102e4967e2527ced; steamCountry=US%7C708d3************e569cc75495; steamLogin=76561198052177472%7C%7C4EC6FBDFA0******************12DE568; steamLoginSecure=765611*********************44BEC4E8BDA86264E; webTradeEligibility=%7B%22allowed%22%3A1%2C%22allowed_at_time%22%3A0%2C%22steamguard_required_days%22%3A15%2C%22sales_this_year%22%3A9%2C%22max_sales_per_year%22%3A200%2C%22forms_request**** ***********cooldown_days%22%3A7%7D; strInventoryLastContext=730_2;最近访问过的AppHubs=42700%2C2***********930%2C440;时区偏移=-14400,0; __utma=268881843.1147920287.1419547163.1431887507.1431890089.151; __utmb=268881843.0.10.1431890089; __utmc=268881843; __utmz=268881843.1431885538.149.94.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)

我删除了一些 cookie 的数据,这样我的交易账户就不会被盗,但你应该明白这一点。我应该如何重新创建cookie?就像我应该创建一个字典,键是cookie中'='之前的值,值是'='符号之后的值?抱歉,如果问题不清楚,我不知道该怎么做。任何帮助都会很棒!

例如。 cookie = {strTradeLastInventoryContext: 730_2, ...}

【问题讨论】:

    标签: python cookies request


    【解决方案1】:

    这里真的有两种选择。


    如果您碰巧有确切的Cookie 标头,您希望将其完全复制为一个大字符串(例如,让requests 驱动的作业接管您在浏览器中创建的会话,手动或使用@987654326 @ 或其他),您可以将其作为名为 Cookie 的任意标头传递,而不是弄清楚如何将其拆分,以便 requests 可以(希望)重新组装您想要的相同标头。


    另一方面,如果你需要动态地创建它的一部分,那么是的,你会想要做你正在做的事情——把它拆开来构建一个名为cookie的字典,然后将它与@一起使用987654330@、req.cookies.update(cookie) 或类似名称(如果您使用会话和准备好的请求)。然后您可以在发送之前轻松修改dict。

    但最简单的方法是不要手动将 cookie 拉开。我很确定 WebKit 开发人员工具可以直接在 Chrome 中为您执行此操作。或者,如果没有,您可以将 cookie 复制为字符串,然后使用 http.cookies 模块(在 Python 2.x 中称为 cookie),如下所示:

    cookie = http.cookies.BaseCookie(cookie_string)
    

    另外,请注意,在许多情况下,您甚至不需要这样做。如果您可以直接从requests 驱动登录和导航,而不是从 Chrome 开始,那么它应该以每个请求中所需的完整 cookie 集结束。您可能需要使用Session,但这很难。

    【讨论】:

    • 是的,我尝试做的只是将长 cookie 粘贴到标题中 Cookie 标签下,但我仍然收到 401 错误。我可能在其中一个表单文件中弄乱了其他东西。顺便说一句,您知道调试发布请求的好方法吗?仅仅知道它失败了并不是那么有帮助。谢谢!
    • @FaTalCubez:嗯,你已经得到了requests 发送的完整标题和正文(与 Chrome 发送的一个比较),以及 401 错误的正文,这两者通常都是对调试很有帮助。但这并不总是足够的——特别是对于调试与登录相关的问题,服务器开发人员通常更倾向于不遗余力地让你更难而不是更容易,出于(真实或错误的)安全原因。
    • 我要发送的 json 文件的密钥顺序是否重要?因为在程序上它们是按顺序排列的,但是当我调试请求时,它们会被移动。
    • @FaTalCubez:这不应该重要。 JSON 对象,如 Python 字典,被定义为没有任何固有顺序。但是,如果您正在处理仅针对一个特定 JS 前端进行测试的编写不佳的服务器,那么即使它们不应该这样做,它们也可能会承担订单,因此这并非不可能。您可以通过手动组合字符串并将其作为字符串发送而不是使用json.dumps 或让requests 为您生成一个 dict 来轻松测试。
    【解决方案2】:

    您可能需要查看cookies. 的请求文档 您是对的,因为 cookie 值作为字典键/值传递给 get 调用。

    cookies = {'cookie_key': 'somelongstring'}
    requests.get(url, cookies=cookies)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2013-09-12
      • 2014-12-18
      • 2018-12-18
      • 2014-06-01
      相关资源
      最近更新 更多