繁体   English   中英

如果网站使用 jwt,如何使用请求发送 json POST 请求?

[英]How to send json POST request using requests if the website uses jwt?

我正在尝试发送 POST 请求以登录到此URL ,我首先检查了网络选项卡,发现 post 请求正在发送到此

url: https://api-my.te.eg/api/user/login?channelId=WEB_APP

请求有效载荷是:

{
   "header":{
      "timstamp":0,
      "customerId":null,
      "msisdn":null,
      "messageCode":null,
      "responseCode":"1200",
      "responseMessage":"Your Session has been expired, please sign in to continue",
      "locale":null,
      "referenceId":null,
      "channelId":null,
      "responeAdditionalParameters":null
   },
   "body":null
}

这是代码:

import requests
import calendar
import time
#Here i tried to send a generated timestamp, idk if this is needed or not
ts = calendar.timegm(time.gmtime())
loginUrl = 'https://api-my.te.eg/api/user/login?channelId=WEB_APP'
values = {
    "msisdn": MobileNumberID,
    "timestamp": str(ts),
    "locale": "Ar"
}

data = {
    "password": PasswordID
}

url = requests.post(loginUrl , data=data , headers=values)
print(url.text)

我查看了站点,在正文中,他们还在数据中传递了 header 属性

所以你应该使用

data = {
  "header": {
    "msisdn": "024568478",
    "timestamp": "1592337873",
    "locale": "Ar"
  },
  "body": {
    "password": "PJGkRJte5ntnKt9TQ8XM3Q=="
  }
}

在标头中,您应该传递本机标头,可能类似于:

headers={'Content-Type': 'application/json', }

但我也看到,当您登录此站点时,他们在标题中传递了jwt参数。 看起来它是某种内置的安全性。 所以看起来你不能使用这个 API。 它仅适用于本网站的后端。

您是否搜索了该站点以查看他们是否有 API 文档,也许他们写的是如何计算 jwt 的值?

编辑:

当您登录时,这是。 如何在 python 请求中使用会话:

s = requests.Session()
data = {"login":"my_login", "password":"my_password"}
url = "http://example.net/login"
r = s.post(url, data=data)

如果您不了解 jwt。 您可以在 python 中使用Selenium 它通过自动化网络浏览器来工作。 因此,您可以打开 chrome,告诉它要加载哪个页面,填写您的登录表单并阅读浏览器中元素的 html。 这将适用于 95% 的网站。 有些甚至有针对它的保护措施。 一些站点使用 cloudflare,它们受到 selenium 自动化的保护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM