Я пытаюсь использовать запросы в режиме PUT в Python, чтобы импортировать файл xls с белым списком в камеру. Мой файл находится на моем рабочем столе.
Я проверил API в почтальоне и попросил почтальона экспортировать мой API в python. Моя команда в почтальоне с разрешенной дайджест-авторизацией представлена ниже.
http://admin:*******@192.168.88.243/ISAPI/Traffic/channels/1/licensePlateAuditData
Я попробовал ее в моем Python тесте запроса, как показано ниже, и работает с отчетом 200OK
PUT http://admin:*******@192.168.200.108/ISAPI/Traffic/channels/1/licensePlateAuditData
Content-Type: text/plain
I использовал почтальон для перевода моего API в Curl и Python Request, и результаты представлены ниже.
Python Request
import requests
url = "http://192.168.88.243/ISAPI/Traffic/channels/1/licensePlateAuditData"
payload = "<file contents here>"
headers = {
'Content-Type': 'text/plain'
}
Curl
curl --location --request PUT 'http://192.168.88.243/ISAPI/Traffic/channels/1/licensePlateAuditData' \
--header 'Content-Type: text/plain' \
--data-binary '@/C:/Users/gerki/Desktop/me=teNolist_192.168.88.243_20200407142606.xls'
response = requests.request("PUT", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
Я запустил свой код в Python, чтобы он заработал, сначала убедившись, что моя авторизация сначала работает с командой GET, что вы можете увидеть в режиме с комментариями в моем коде ниже. Авторизация работала нормально.
Python Код
ht4 = '/ISAPI/Traffic/channels/1/licensePlateAuditData'
ht1 = 'http://192.168.200.108'
ht3 = 'http://192.168.200.109'
ht = ht1 + ht4
htalt = ht3 + ht4
import requests
from requests.exceptions import HTTPError
for url in [ht, htalt]:
try:
from requests.auth import HTTPDigestAuth
payload = "C:/Users/gerki/Desktop/me=teNolist_192.168.88.243_20200407142606.xls"
headers = {
'Content-Type': 'text/plain'
}
response = requests.request("PUT", url, data=payload, headers=headers, auth=HTTPDigestAuth('admin', 'OTE_2019'))
# If the response was successful, no Exception will be raised
response.raise_for_status()
except HTTPError as http_err:
print(f'HTTP error occurred: {http_err}') # Python 3.6
except Exception as err:
print(f'Other error occurred: {err}') # Python 3.6
else:
print('Success!')
response.encoding = 'utf-8'
print(response.text)
Затем я получаю ошибку 400, которая, как я подозреваю, связана с тем, как python открывает файл xls , Мой код ошибки
HTTP error occurred: 400 Client Error: Bad Request for url: http://192.168.200.108/ISAPI/Traffic/channels/1/licensePlateAuditData
Может ли кто-нибудь объяснить, могу ли я выполнить процедуру как-нибудь сработавшей? Мне нужно применить код на многих IP-адресах, чтобы применить файл XLS во многих камерах. Поэтому мне нужен код в python, чтобы создать исполняемый файл, и поэтому POSTMAN не работает.