Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 如果网站使用jwt,如何使用请求发送json POST请求?_Python_Json_Python Requests - Fatal编程技术网

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

Python 如果网站使用jwt,如何使用请求发送json POST请求?,python,json,python-requests,Python,Json,Python Requests,我正在尝试发送POST请求以登录到此站点 ,我首先检查了“网络”选项卡,发现post请求正在发送到此服务器 网址: 请求有效载荷为: { "header":{ "timstamp":0, "customerId":null, "msisdn":null, "messageCode":null, "responseCode&

我正在尝试发送POST请求以登录到此站点 ,我首先检查了“网络”选项卡,发现post请求正在发送到此服务器

网址:

请求有效载荷为:

{
   "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)

我查看了站点,在主体中,它们也在数据中传递头属性

所以你应该使用

data = {
  "header": {
    "msisdn": "024568478",
    "timestamp": "1592337873",
    "locale": "Ar"
  },
  "body": {
    "password": "PJGkRJte5ntnKt9TQ8XM3Q=="
  }
}
在头文件中,您应该传递本机头文件,可能类似于:

headers={'Content-Type': 'application/json', }
但我也看到,当你登录这个网站时,他们会在标题中传递一个参数。看起来像是某种内置的安全性。因此,看起来您无法使用此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中使用。它通过自动化网络浏览器来工作。因此,您可以打开chrome告诉它加载哪个页面,填写登录表单,并在浏览器中读取元素的html。这将适用于95%的网站。有些甚至有针对它的保护措施。有些站点使用cloudflare,它们受到selenium automation的保护。

这是您的真实密码还是一个伪密码?这有关系吗?它是加密的,我给它添加了一些字母没有用户名,实际上它是一个电话号码,但这并不重要,因为它是json中的
msisdn
。请看一下文档中的这一部分:在那一段的末尾,他们描述了发出请求时的
json
参数。我知道如何使用请求,这不是问题,问题是网站使用了
jwt
。最后我使用了
selenium
给了我与以前相同的日志,传递的密码是
str
并且没有加密,而且
时间戳与生成的时间戳不同(我不知道是否需要它)。我想你是对的,我试图找到一个API,但没有运气,此外,我还尝试解码了
jwt
,发现他们使用的是HS256,我想我可以使用这个网站计算jwt:,他们使用相同的格式,在你的会话过期2分钟后给你2分钟的时间。我在回答中添加了一些其他内容,查看后面的编辑:我尝试了会话1,但没有工作,所以我使用了selenium,谢谢