Необходимо отправить JSON почтовый запрос с очень длинным строковым значением - PullRequest
0 голосов
/ 02 апреля 2020

Я разрабатываю билетный бот для действительно определенного c использования. Мне нужно отправить запрос POST на сервер Rundeck, и в одном из полей данных есть (очень очень) длинная строка текста из тела письма.

Этот запрос POST возвращает ошибку от Rundeck каждый раз. Я кодирую с помощью Python и использую модуль «запросы» для выполнения таких запросов.

ПРИМЕР ЗАПРОСА ПОЧТЫ:

data =  {"options":{
            "solicitant":"NAME.NAME.NAME",
            "emailSolicitant":"email@server.tld",
            "client":"CLIENT NAME",
            "subject":"Subject from the mail, this is working ok.",
            "body":"**HERE GOES THE LONG \n LONG \n LONG \n LONG BODY OF THE MESSAGE**",
          }
         }

ОШИБКА, КОТОРУЮ Я ПОЛУЧАЮ ОТ РУНДЕКА:

File "/path/to/a/shell/script.sh", line 18
    body = 'HERE GOES THE LONG
                             ^
    SyntaxError: EOL while scanning string literal
    Failed: NonZeroResultCode: Remote command failed with exit status 1

КАК Я ЗАДАВАЮ ЗАПРОС ПОЧТЫ

requestJob = requests.post('https://myrundeck.tld/api/31/job/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/run', headers=headers, data=str(data))

ИМО Похоже, что он не принимает "\ n" как часть текста ..

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Может быть, вы можете попробовать заменить str(data) на json.dumps(data).

Не забудьте import json.

0 голосов
/ 02 апреля 2020

Здесь:

requestJob = requests.post(
    'https://myrundeck.tld/api/31/job/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx/run',
    headers=headers, 
    data=str(data)
    )

str(data) - ваша проблема - requests.post() ожидает dict здесь , поэтому просто передайте data=data.

Обратите внимание, что в зависимости от спецификаций API у вас могут возникнуть другие ошибки в дальнейшем.

...