【问题标题】:How upload photo to instagram with post requests python如何使用发布请求 python 将照片上传到 Instagram
【发布时间】:2020-09-06 08:52:57
【问题描述】:

我正在尝试撰写将照片上传到 Instagram 的帖子请求,但第三个请求向“instagram.com/create/configure/”返回 403 错误

我的代码:

import re
import requests
import urllib.request
from datetime import datetime

link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'

login = 'login_name'
password = '0000'

time = int(datetime.now().timestamp())
print(time)
payload = {
    'username': login,
    'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:{password}',
    'queryParams': {},
    'optIntoOneTap': 'false'
}

with requests.Session() as s:
    r = s.get(link)
    a = r.cookies['csrftoken']
    print(r.cookies)
    print(a)
    csrf = re.findall(r"csrf_token\":\"(.*?)\"", r.text)[0]
    print(csrf)

    r = s.post(login_url, data=payload, headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://www.instagram.com/accounts/login/",
        "x-csrftoken": csrf
    })
    print(r.status_code)
    print(r.url)
    print(r.text)
    print(s.cookies)
    r = s.get('https://www.instagram.com/accounts/edit/')
    print(login in r.text)


    microtime = int(datetime.now().timestamp())
    headers =  {
        "content-type": "image / jpg",
        "X-Entity-Name" : f"fb_uploader_{microtime}",
        "Offset": "0",
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
        "x-entity-length": "299255",
        "X-Instagram-Rupload-Params": f'{{"media_type": 1, "upload_id": {microtime}, "upload_media_height": 1080, "upload_media_width": 1080}}',
        "x-csrftoken": csrf,
        "x-ig-app-id": "1217981644879628"
    }

    img = urllib.request.urlopen('https://sun9-64.userapi.com/RVgUHSq9fXrDr8YBJ4a4h9xwN4EQA_8BXuQ5Vg/Mdx3LwawEmY.jpg')
    photo = img.read()
    r = s.post(f'https://www.instagram.com/rupload_igphoto/fb_uploader_{microtime}', data=open("4.jpg", "rb"), headers=headers)
    print(r.text)
    headers = {
        'Content-Length': '104',
        'content-type': 'application/x-www-form-urlencoded',
        "origin": "https://www.instagram.com",
        "referer": "https://www.instagram.com/create/details/",
        'user-agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
        "x-csrftoken": csrf,
        "x-ig-app-id": "1217981644879628",
        "X-Requested-With": "XMLHttpRequest"
    }

    body = {
        'upload_id': f'{microtime}',
        "caption":'text for caption',
        'usertags':'',
        'custom_accessibility_caption': '',
        'retry_timeout':''
    }
    r = s.post('https://www.instagram.com/create/configure/', data=body, headers=headers)
    print(r.status_code)
    print(r.text)

流程: 第一次授权,一切正常

第二个请求是上传照片,一切正常

第三次请求,带照片的参数,有错误... 返回错误 403

【问题讨论】:

标签: python web post request instagram


【解决方案1】:

尝试使用智能手机用户代理并在上传响应中检索 user_id,然后将其设置在帖子正文中而不是时间中,这对我帮助很大:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多