如何使用scrapy shell和python登录此站点-401错误?

时间:2018-12-14 09:50:19

标签: python post scrapy

我正试图通过scrapy shell登录到该网站,寻求seek.com/login。我还安装了burp suite来分析其url和标题等。

from scrapy.http import FormRequest
frmdata = {"captcha":"","email":"MYEMAIL.com","password":"MY_PASSWORD","is_rememberme":"0","locale":"en_US","auth_type":"bearer_token","date":"2018-12-13T09:56:22.957Z"}


url = "https://www.seeking.com/v3/auth/login"
r = FormRequest(url, formdata=frmdata)
fetch(r)

使用此代码,我得到一个HTTP 401错误,据我所知,这基本上是一个认证错误。

我通过burpsuite转发了呼叫,并得到了以下拦截。

POST /v3/auth/login HTTP/1.1
Host: www.seeking.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) 
Gecko/20100101 Firefox/63.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://www.seeking.com/login?fromLogout=1
Content-Type: application/json;charset=utf-8
Web-Version: 3.59
Authorization: Basic NTI2ZTIwYzExMDI0NDYzNTk5OTI5MzUwZThiNWEzMTI6bHN0emd4ZzpSRzRzS3VmdEJMRTQxMm92TnMxbDR6L0ZkZ1dESHZuM2wwZWxtYWhyMGtnPQ==
Content-Length: 166
Connection: close
Cookie: __cfduid=dcf9fd66583d55382f362c18a83d904ca1544519479; 
_gcl_au=1.1.2035701377.1544519485; _ga=GA1.2.1740241044.1544519486; 
com.silverpop.iMAWebCookie=e88c45d1-3c24-11c6-089e-e287aae2c678; 
__cfruid=3eebbdc1e401ed560c23a7c474c41e59b2e93018-1544520179; 
device_cookie=1; __gads=ID=a1e437c03ddad1b3:T=1544519579:S=ALNI_MYb30xY4z76J4NniCK_ZtOyOdPMKA;_lb_user=gfpuzje6kg; seeking_session=eyJpdiI6Im4yMTNJNVNRZjkxbnZzMmNpYnQ4dkE9PSIsInZhbHVlIjoiVGhGVUJDejc1dElJbEwxekh5d2hXUnhjeDlpVWR2dW9IWWJqeDZvRmI3VU9Pc1lpZXZGWGJxejQ1alNXbGVXUGJqaEpORU9LNFJITVh0N3IwR1E0bUE9PSIsIm1hYyI6IjUyODU3MWIxYjM3MGU3M2E0YjI1YzM2MzNmNDc5ZDMzZDdjYTg1ZWMxYWU2ODJjY2JlMTJmZWJlNmUyZDkyNWMifQ%3D%3D {"captcha":"","email":"MYEMAIL","password":"MYPASS","is_rememberme":0,"locale":"en_US","auth_type":"bearer_token","date":"2018-12-14T09:15:56.016Z"}

对此我完全陌生,花了2天的时间来弄清楚我需要传递给此POST进行登录的内容。

我的问题是

1)基于此拦截,我通过FormRequest的请求应该是什么样?

2)我看到正在传递到帖子中的cookie /授权(授权令牌,随每个POST,会话cookie等更改)。它们来自何处?我在抓取时如何获取它们以便成功登录?

3)登录后在网站上抓取其他页面时,是否需要存储这些会话变量?我需要做些什么才能保持登录状态以访问其他页面?

1 个答案:

答案 0 :(得分:0)

看起来登录页面将很快传递数据,而不是URL编码的字符串(FormRequest将创建该字符串)。

类似的事情应该起作用:

r = scrapy.Request(
    url=url,
    method='POST',
    body=json.dumps(frmdata),
    headers={'Content-Type': 'application/json'},
)

令牌,Cookie等可能是在您最初请求登录页面时创建的,因此您可能需要先请求登录页面,然后才能尝试登录。
可能其中一些是用javascript生成的(未选中),因此您可能需要深入研究js代码以了解发生了什么,甚至自己执行js(例如,使用浏览器)。

Scrapy将为您跟踪会话,因此您无需执行任何操作即可保持登录状态。