![](/img/trans.png)
[英]send a post request to a website with multiple form tags using requests in python
[英]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.