首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Instagram私有API 403,甚至带有cookie和headers

Instagram私有API 403,甚至带有cookie和headers
EN

Stack Overflow用户
提问于 2018-04-15 22:25:19
回答 3查看 2.4K关注 0票数 2

关于避免使用私有Isntagram APi的403,需要您的建议。

我在web上重用了一个isntagram 刮刀代码。我已经做了几次尝试,即使有标题和cookie,也都是下一个。从post url获取信息并提取它没有问题。尽管如此,在几个页面上发布评论并切换到另一个页面,我需要进行身份验证。这只是测试身份验证的第一步。

代码语言:javascript
复制
    from botocore.vendored import requests
    import urllib.parse
    import hashlib
    import json
    def lambda_handler(event, context):
        CHROME_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
        def getSession(rhx_gis, csrf_token, variables):
            """ Get session preconfigured with required headers & cookies. """
            #"rhx_gis:csfr_token:user_agent:variables"
            print(variables)
            values = "%s:%s:%s:%s" % (
                    rhx_gis,
                    csrf_token,
                    CHROME_UA,
                    variables)
            x_instagram_gis = hashlib.md5(values.encode()).hexdigest()
        
            session = requests.Session()
            session.headers = {
                    'user-agent': CHROME_UA,
                    'x-instagram-gis': x_instagram_gis
                    }
            print(x_instagram_gis)
            session.cookies.set('ig_pr', '2')
            session.cookies.set('csrftoken', csrf_token)
        
            return session
        
        def runX():
            session = requests.Session()
            session.headers = { 'user-agent': CHROME_UA }
            response = session.get("https://www.instagram.com/selenagomez")
            data = json.loads(response.text.split("window._sharedData = ")[1].split(";</script>")[0])
            csrf = data['config']['csrf_token']
            rhx_gis = data['rhx_gis']
            variables = '{"id":"460563723","first":10,"after":"AQBf8puhlt8nU2JzmYdMMTuH0FbMgUM1fnIOZIH7n94DM4VLWkVILUAKVB-5dqvxQEI-Wd0ttlEDzimaaqwC98jccQaDQT4tSF56c_NlWi_shg"}'
            session = getSession(rhx_gis, csrf, variables)
        
            query_hash = '33ba35852cb50da46f5b5e889df7d159'
            encoded_vars = urllib.parse.quote(variables, safe='"')
            url = 'https://www.instagram.com/graphql/query/?query_hash=%s&variables=%s' % (query_hash, encoded_vars)
            print(url)
            opp = session.get(url)
            print(opp.status_code)
        runX();

更新4月16日->固定

  1. 发行已确定,目前已收到200份。将散列更改为query_hash = 'ac38b90f0f3981c42092016a37c59bf7‘,并从x-instagram-gis计算中删除用户代理: 值= "%s:%s:%s“%( rhx_gis,csrf_token,变量)
EN

回答 3

Stack Overflow用户

发布于 2018-04-23 14:56:43

截至2018年4月23日,您似乎不再需要cookie管理或csrf令牌。以下是你所需要的一切:

代码语言:javascript
复制
def getSession(rhx_gis, variables):
        values = "%s:%s" % (
                rhx_gis,
                variables)
        x_instagram_gis = hashlib.md5(values.encode()).hexdigest()

        session = requests.Session()
        session.headers = {
                'x-instagram-gis': x_instagram_gis
                }

        return session
票数 1
EN

Stack Overflow用户

发布于 2018-04-16 02:30:45

Instagram更改了API。现在需要注意了。没有auth就无法使用instagram graphql。

您还可以在这里检查api是否需要auth。如果没有回报,它意味着需要更多。

代码语言:javascript
复制
$ curl https://www.instagram.com/graphql/query/?query_hash=42323d64886122307be10013ad2dcc44&variables={"id":"460563723","first":10,"after":"AQBf8puhlt8nU2JzmYdMMTuH0FbMgUM1fnIOZIH7n94DM4VLWkVILUAKVB-5dqvxQEI-Wd0ttlEDzimaaqwC98jccQaDQT4tSF56c_NlWi_shg"}
票数 0
EN

Stack Overflow用户

发布于 2018-04-16 13:57:52

从x-instagram-gis中删除CHROME_UA。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49847376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档