Попытка вызвать API с Python, где часть заголовков содержит "{}".
С Curl это работает напрямую:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'token: {"uid": "email@domain.com","timestamp": 0,"token": "","client": "web","version": "","language": "zh-CN" }' -d '{ \
"account": "email@domain.com", \
"pwd": "mypassword", \
"is_local": true, \
"agreement_agreement": 0 \
}' 'http://globalapi.sems.com.cn:82/api/v1/Common/CrossLogin'
Но с Python Я не могу заставить его работать, API выдает ошибку. Я подозреваю, что это связано с форматом токена в заголовке, так как это строка, содержащая {}. Смотрите различные варианты, закомментированные ниже - API не принимает ни один из них. Он отлично подходит для использования {} в диктовке с Python, просто используя обычный код:
sems_headers = {
'Content-Type':'application/json',
'Accept':'text/json',
'token': '{"uid": "email@domain.com","timestamp": 0,"token": "","client": "web","version": "","language": "en-GB"}'
}
for c, d in sems_headers.items():
print(c, d)
Как я могу вызвать API с форматом, необходимым для токена в Python?
sems_headers = {
'Content-Type':'application/json',
'Accept':'text/json',
#'token': "'uid':'email@domain.com', 'timestamp':'0', 'token':'', 'client':'web', 'version':'', 'language':'en-GB'"
#'token': '{"uid": "email@domain.com","timestamp": 0,"token": "","client": "web","version": "","language": "en-GB"}'
#'token': ''{{"uid": "email@domain.com","timestamp": 0,"token": "","client": "web","version": "","language": "en-GB"}}'
#'token': "{""uid"": ""email@domain.com"", ""timestamp"": 0, ""token"": "" "", ""client"": ""web"", ""version"": "" "", ""language"": ""en-GB"" }"
}
sems_post_data = {
'account':'email@domain.com',
'pwd':'mypassword',
'is_local':True,
'agreement_agreement':0
}
post = requests.post("https://globalapi.sems.com.cn/api/v1/Common/CrossLogin", headers=sems_headers, data=sems_post_data)
print(post.text)