検索

ホームページ  >  に質問  >  本文

python - 为什么aiohttp的response里的cookies和程序出错时库里自动打印的cookies不一样?

以下是获取cookies的一段代码,运行时是没有问题的。

    r = await session.post(url, data=postData)
    if r.status == 200:
        print ("Get Cookie Success!( Account:%s )" % account)
        cookie = r.cookies
        print (cookie)
        cookies.append(cookie)
    else:
        pass
    # 释放连接
    await r.release()

下图上边的红色框是上边代码的输出,如果程序中有bug,不管有什么bug时都会自动打印图中下边红色框的信息,上下两个红框中的cookies为什么不一样?post的url只有一个且返回的都是200。网上找了很久也找不到答案,望指教,谢谢!

迷茫迷茫2875日前984

全員に返信(1)返信します

  • 怪我咯

    怪我咯2017-04-18 10:27:00

    ソース コードを読んで問題を段階的に特定すると、最初の赤いボックスの出力は ClientResponse.cookies で、2 番目の赤いボックスは ClientResponse のエラーです。 __del__。いくつかの呼び出しの後、ClientResponse.__repr__ClientResponse.headers が出力されます。
    そして、cookiesheaders から抽出され、使用されたメソッドは http.cookies.SimpleCookie.load であり、最終的に であることがわかります。 > 正規表現マッチングを使用する場合、BaseCookie__parse_string メソッドに問題があります。正規表現は次のとおりです: ClientResponse.cookies,第二个红框是出错时在ClientResponse.__del__经一番调用后在ClientResponse.__repr__输出的ClientResponse.headers
    cookies是从headers提取的,使用的方法是http.cookies.SimpleCookie.load,最后发现是BaseCookie里的__parse_string方法在使用正则表达式匹配时有问题。正则表达式如下:

    _CookiePattern = re.compile(r"""
        \s*                            # Optional whitespace at start of cookie
        (?P<key>                       # Start of group 'key'
        [""" + _LegalKeyChars + r"""]+?   # Any word of at least one letter
        )                              # End of group 'key'
        (                              # Optional group: there may not be a value.
        \s*=\s*                          # Equal Sign
        (?P<val>                         # Start of group 'val'
        "(?:[^\"]|\.)*"                  # Any doublequoted string
        |                                  # or
        \w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT  # Special case for "expires" attr
        |                                  # or
        [""" + _LegalValueChars + r"""]*      # Any word or empty string
        )                                # End of group 'val'
        )?                             # End of optional value group
        \s*                            # Any number of spaces.
        (\s+|;|$)                      # Ending either at space, semicolon, or EOS.
        """, re.ASCII | re.VERBOSE)    # re.ASCII may be removed if safe.

    这段在匹配expires=Saturday, 06-Mar-2027 02:32:46 GMT;时第一次获取的keyexpires,valSaturday, ,第二次获取的key06-Mar-2027,valNone在函数里return了,因为不能正确解释expires所以造成cookiesheaders リーリー

    expires=Saturday, 06-Mar-2027 02:32:46 GMT; に一致するときに初めて取得された keyexpires です。 valSaturday, で、2 回目に取得した key06-Mar-2027, です。 >val は関数 returnNone です。expires が正しく解釈できないため、cookie が発生します。 > Cookie 情報に関しては headers とは異なります。 🎜

    返事
    0
  • キャンセル返事