Python 如果网站使用jwt,如何使用请求发送json POST请求?
我正在尝试发送POST请求以登录到此站点 ,我首先检查了“网络”选项卡,发现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&
{
"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,谢谢