Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求中的空RequestScookeJar_Python_Cookies_Python Requests_Httprequest_Instagram - Fatal编程技术网

Python请求中的空RequestScookeJar

Python请求中的空RequestScookeJar,python,cookies,python-requests,httprequest,instagram,Python,Cookies,Python Requests,Httprequest,Instagram,我正在使用Python请求模块 >>> import requests >>> s1 = requests.Session() >>> r1 = s1.get("https://www.facebook.com/") >>> r1.cookies <RequestsCookieJar[Cookie(version=0, name='fr', ... ]> i、 e.requestScookeJar是空的,但它应

我正在使用Python请求模块

>>> import requests
>>> s1 = requests.Session()
>>> r1 = s1.get("https://www.facebook.com/")
>>> r1.cookies
<RequestsCookieJar[Cookie(version=0, name='fr', ... ]>
i、 e.
requestScookeJar
是空的,但它应该返回一些东西

有人能解释一下为什么会这样吗


谢谢。

这是因为instagram。当您首先打开instagram时,它不会向您发送cookies,您必须登录,或者再次发出get请求

更新:当您想要登录并想要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”方法来通过登录传递信息。

响应头是什么?@KlausD。
r2的响应头是:
{'Content-Type':'text/html','X-Frame-Options':'SAMEORIGIN','Cache Control':'private,no Cache,no store,must revalidate','Pragma':'no Cache','Expires':'Sat,Jan 2000 00:00:00 GMT','Vary':'Cookie,Accept Language,Accept Encoding','Content Encoding':'gzip','Date:'Wed,2018年5月30日11:06:59 GMT','Strict-传输安全“:”最大年龄=86400“,”连接“:”保持活动状态“,”内容长度“:”5528'}
若我两次收到请求,我仍然有空的
requestscookejar
,为了登录,你们需要
csrftoken
,它是第一次收到请求的cookies附带的。那个不是真的!你们可以取回csrftoken。我会更新我的答案好的,我得到了。问题是我错过了
的“cookie”:“ig\u cb=1”
在我的请求头中。它是干什么用的?GET-resquest返回一个非空的
RequestScookejar
。因此不需要刮取页面并查找
csrf\u令牌。
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)