首页 > 解决方案 > 使用带有请求的 instagram 登录,在使用会话创建类时会抛出 AttributeError: 'User' object has no attribute 'headers'

问题描述

我正在开发一个允许用户在他们的 Instagram 帐户上执行特定操作的小项目。这些操作将获得关注/关注者、取消关注帐户并接受关注请求。出于某种原因,在尝试为其编写课程时,我似乎无法让帐户签名工作。我已经使用功能登录,但我想让帐户/会话成为自己的数据类型,以便我可以为我预期的未来功能操作它。我不确定我做错了什么。这是我当前的代码:

import requests
import json

class User:

    # Constructor
    def __init__(self, username, password):
        self.session = requests.Session()
        self.userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
        self.password = password
        self.username = username
        self.baseUrl = 'https://www.instagram.com/accounts/login/ajax/'
        self.refererUrl = 'https://www.instagram.com/accounts/login/'

    # Methods
    def start_session(self):

        try:
            self.req = self.session.get(self.baseUrl)
            self.session.headers = {'user-agent': self.userAgent}
            self.session.headers.update({'Referer': self.refererUrl})
            self.session.headers.update({'x-csrftoken': self.req.cookies['csrftoken']})
            self.login_data = {'username': self.username, 'password': self.password}
            self.login = self.session.post(self.baseUrl, data=self.login_data, allow_redirects=True)
            self.headers.update({'x-csrftoken': self.login.cookies['csrftoken']})
            print(self.login.json())


        except:
            print("There was an error signing in.")


def main():
    print("Welcome to InstaTool. Please type in your username and password.")
    username = input("Username: ")
    password = input("Password: ")
    insta_account = User(username, password)
    insta_account.start_session()


if __name__ == "__main__":
    main()

这是我的错误:

Traceback (most recent call last):
  File "/Users/ty/InstaTool/InstaTool.py", line 50, in <module>
    main()
  File "/Users/ty/InstaTool/InstaTool.py", line 46, in main
    insta_account.start_session()
  File "/Users/ty/InstaTool/InstaTool.py", line 33, in start_session
    self.headers.update({'x-csrftoken': self.login.cookies['csrftoken']})
AttributeError: 'User' object has no attribute 'headers'

我很困惑,因为如果我计划更新 start_session() 函数中的标题,我不确定为什么我的对象需要一个“标题”属性。任何帮助表示赞赏。

标签: pythonpython-requestsinstagram

解决方案


似乎headers尝试调用该方法self,即User

self.headers.update({'x-csrftoken': self.login.cookies['csrftoken']})

您可能希望这条线是:

self.session.headers.update({'x-csrftoken': self.login.cookies['csrftoken']})

推荐阅读