मैं अपने कार्यक्रमों में से एक को एसिंक्स चालू करने की कोशिश कर रहा हूं, लेकिन सत्र डेटा पोस्ट नहीं कर रहा है।

from aiohttp import ClientSession as Session
from bs4 import BeautifulSoup as BS
import asyncio

class Finder(Session):
    async def login(self, loginurl, homeurl, username, password):
        async def getlogintoken(loginurl):
            async with self.get(loginurl) as loginpage:
                return(BS(await loginpage.text(), 'html.parser').select('#login > input[type=hidden]:nth-child(3)')[0]['value'])

        async def postlogindata(loginurl, username, password, logintoken):
            await self.post(loginurl, data={'username': username, 'password': password, 'logintoken': logintoken})

        async def gethome(homeurl):
            async with self.get(homeurl) as homepage:
                print(homepage.url)

        logintoken = await getlogintoken(loginurl)
        print(logintoken)
        await postlogindata(loginurl, username, password, logintoken)
        await gethome(homeurl)

मेरे पास यही है और यह अनुरोधों के साथ पूरी तरह से ठीक काम करता है (सभी एसिंक सामान के बिना), लेकिन aiohttp के साथ यह काम नहीं कर रहा है। किसी भी तरह की सहायता का स्वागत किया जाएगा!

2
Chrigi 6 मार्च 2020, 22:35

1 उत्तर

सबसे बढ़िया उत्तर

मुझे पता चला कि क्या गलत था: क्लाइंट सत्र स्वचालित रूप से कुकीज़ सहेजता नहीं है। यह सही ढंग से पोस्ट करता है लेकिन सत्र आईडी रखने के लिए आपको लॉग इनटोकन प्राप्त करते समय कुकीज़ को अपडेट करना होगा।

async with self.get(loginurl) as loginpage:
            self.cookie_jar.update_cookies(loginpage.cookies)
            return BS(await loginpage.text(), 'html.parser').find(attrs={'name': 'token'})['value']
1
Chrigi 24 जुलाई 2020, 15:28