【问题标题】:Relation Between Fetch using Javascript and Fetch Using Python Requests使用 Javascript 获取和使用 Python 请求获取之间的关系
【发布时间】:2021-06-16 00:38:55
【问题描述】:

我一直在尝试使用 Python 请求和/或 Scrapy 访问 API,但使用 POST 请求登录失败。我决定通过 JavaScript 使用 fetch 命令来试试运气,并能够使用以下代码成功登录。

    fetch("https://vendoradmin.fashiongo.net/api/login", {
  "headers": {
    "accept": "application/json",
    "accept-language": "en,en-US;q=0.9,it;q=0.8,es;q=0.7",
    "content-type": "text/plain",
    "sec-ch-ua": "\"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"",
    "sec-ch-ua-mobile": "?0",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
  },
  "referrer": "https://vendoradmin.fashiongo.net/",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "{\"username\":\"*****\",\"password\":\"*****\"}",
  "method": "POST",
  "mode": "cors",
  "credentials": "omit"
})

无论我如何尝试使用 Python 请求设置标头和有效负载,我总是会收到 500 个状态码,但我认为我遗漏了一些东西。有没有人可以将上述 JS Fetch 直译为 Python 请求?或者解释一下为什么这适用于 JS 而不是 Python 请求?

我一直在尝试的当前 Python 请求脚本如下:

import requests

payload = {'username':'*****', 'password':'*****'}

headers = {
'Host': 'vendoradmin.fashiongo.net',
'Origin': 'https://vendoradmin.fashiongo.net/#/auth/login',
'Referrer':'https://vendoradmin.fashiongo.net/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}

r = requests.post("https://vendoradmin.fashiongo.net/api/login", data = payload, headers = headers)

【问题讨论】:

  • 使用json kwarg 代替datadata 使帖子表单编码

标签: javascript python api python-requests fetch


【解决方案1】:

使用json kwarg 而不是data kwarg:

r = requests.post("https://vendoradmin.fashiongo.net/api/login", json = payload, headers = headers)

data 使请求表单编码,而不是使用 application/json 作为内容类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2023-04-05
    • 2011-05-11
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多