Как преодолеть ограничение максимального URL с помощью запросов Python - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть два приложения Python, работающие на отдельных портах с помощью web.py.Я пытаюсь отправить строки JSON длиной от 30 000 до 40 000 символов из одного приложения в другое.JSON содержит всю информацию, необходимую для создания отчета PowerPoint.Я попытался разрешить эту связь, используя такие запросы:

import requests
template = <long JSON string>     
url = 'http://0.0.0.0:6060/api/getPpt?template={}'.format(template)
resp= requests.get(url).text

Я заметил, что на принимающей стороне json был урезан до 803 символов, и поэтому при декодировании JSON я получаю:

json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 780 (char 779)

Я предполагаю, что это связано с ограничением того, насколько длинным может быть URL-запрос из web.py или запросов, или это стандартизированная вещь.Есть ли способ обойти это или мне нужно найти другой способ включения связи между этими двумя приложениями Python.Если отправка таких длинных JSON через http невозможна, не могли бы вы предложить альтернативные варианты.Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

Не помещайте столько данных в URL. Большинство браузеров ограничивают общую длину URL (включая строку запроса) примерно 2000 символами, а серверы - около 8000.

См. Какова максимальная длина URL в разных браузерах? , которая цитирует стандарт HTTP / 1.1, RFC7230 :

На практике встречаются различные специальные ограничения на длину строки запроса. РЕКОМЕНДУЕТСЯ, чтобы все отправители и получатели HTTP поддерживали как минимум длину строки запроса в 8000 октетов.

Вместо этого вам нужно отправить столько данных в теле запроса. Используйте метод POST или PUT в качестве метода.

Сама библиотека requests не накладывает никаких ограничений на длину URL; он отправляет URL на сервер без его усечения. Это ваш сервер , который урезал его здесь, вместо того, чтобы дать вам 414 URI Too Long код состояния.

...