Некоторый фон. Этот код берет данные из сценария сбора данных и затем отправляет их в защищенный REST API в Django. У меня есть ключ API, и это единственная строка в файле api.key. У меня также есть URL для публикации в файле post.url (он выглядит как http://example.com/api/, а затем я объединяю правильное имя узла API в конце).
Код ниже для моего узла API солнечных данных (публикует данные, собранные с солнечных панелей)
import gather_solar as gs
import requests
import json
import os
def post_solar():
print("DEBUG: start solar")
data = gs.gather_solar()
api_key = None
url = None
try:
here = os.path.dirname(os.path.abspath(__file__))
filename = os.path.join(here, 'api.key')
file = open(filename, "r")
api_key = file.readline()
api_key.replace('\n', '')
except Exception as e:
print("ERROR: " + str(e))
try:
here = os.path.dirname(os.path.abspath(__file__))
filename = os.path.join(here, 'post.url') #server will use different url
file = open(filename, "r")
url = file.readline()
url.replace('\n', '')
except Exception as e:
print("ERROR: " + str(e))
if api_key is not None and url is not None:
authorization = "Token " + api_key
authorization.replace('\n', '')
headers = {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': authorization
}
json_data = json.dumps(data)
url += "solar/"
url.replace('\n', '')
print(url)
req = requests.Request('POST', url, data=json_data, headers=headers)
prepared = req.prepare()
print("DEBUG: POST Headers: " + str(prepared.headers))
print("DEBUG: POST Body: " + str(prepared.body))
s = requests.Session()
response = s.send(prepared)
print("DEBUG: Response Code: " + str(response.status_code))
print("DEBUG: Response Headers: " + str(response.headers))
print("DEBUG: Response Data: " + str(response.json()))
else:
print("DEBUG: Error with API key")
print("DEBUG: end solar")
Я выполняю код на сервере Ubuntu через AWS и у меня настроена и запущена Apache 2. Однако всякий раз, когда я запускаю этот скрипт, я получаю сообщение о том, что мой токен недействителен, и он показывает токен как «Token abcd ... abcd \ n». Это особенно расстраивает, потому что у меня нет этой проблемы, когда я запускаю скрипт локально (код Visual Studio на Win10). Как вы можете видеть, я пытался удалить любые строки, где это возможно, но это, похоже, не помогает. Любая помощь будет принята с благодарностью