Пустые запросыCookieJar в запросах Python - PullRequest
0 голосов
/ 30 мая 2018

Я работаю с модулем запросов Python.

>>> import requests
>>> s1 = requests.Session()
>>> r1 = s1.get("https://www.facebook.com/")
>>> r1.cookies
<RequestsCookieJar[Cookie(version=0, name='fr', ... ]>

то есть RequestsCookieJar заполнено, и заполнено для каждого URL, который я пытаюсь.Но для Instagram я получаю:

>>> s2 = requests.Session()
>>> r2 = s2.get("https://www.instagram.com/")
>>> r2.cookies
<RequestsCookieJar[]>

то есть RequestsCookieJar пусто, но оно должно что-то вернуть.

Может кто-нибудь объяснить, почему это происходит?

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Это из-за инстаграм.Когда вы сначала открываете instagram, он не отправляет вам файлы cookie, вам необходимо войти в систему или сделать запрос еще раз.

Обновление: если вы хотите войти в систему и хотите получить токен csrf, существует метод:

import json
import requests
import lxml.html

def get_csrf_token(content):
    xpath_data = lxml.html.fromstring(content).xpath('/html/body/script[1]/text()')[0]
    raw_json = xpath_data[xpath_data.find('{'):-1]
    return json.loads(raw_json)["config"]["csrf_token"]

def get_main_page():
    session = requests.Session()
    content = session.get('https://instagram.com')

    csrf_token = get_csrf_token(content.content)
    header = {'x-csrftoken'      : csrf_token,
              'x-requested-with' : 'XMLHttpRequest',
              'User-Agent'       : "Your user agent there",
              "referer"          : 'https://instagram.com',
              "cookie"           : "ig_cb=1",
              "origin"           : 'https://instagram.com'}

    session.headers.update(header)

Я предполагаю, что вы могли бы написать метод "POST" для входа в систему.

...