Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
1

Request.Response ошибка 400 bad request

16.01.2019, 10:50. Просмотров 858. Ответов 11
Метки нет (Все метки)

Добрый день!

Прошу помочь с обработкой запросов в Python 2.7.11
Принимать реквест и сохранить на сервере файл из него уже получилось, а отправить клиенту респонс пока никак.
В респонсе должен находиться файл PDF. Фидлер показывает что респонс проходит со статусом 200 ОК, но 1С (клиент) не может его обработать - коллеги говорят выбрасывает ошибку 400, видимо респонс имеет неподходящий формат. Может кто выполнял аналогичные задачи?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def pdf_http_response(file_body):
    # значение file_body вида "%PDF-1.5\r\n%\xb5\xb5\xb5\xb5\r\n1 0 obj\r\n<</Type/..."
    resp = flask.Response(file_body, status=200, mimetype='application/pdf')
    return resp
 
@app.route('/viewer', methods=['POST'])
def viewer_method():
    file_page = int(flask.request.args.get(u'numpage'))
    file_type = flask.request.args.get(u'type')
    file_data = flask.request.files[u'fieldNameHere']
    file_body = file_data.read()
 
    save_temp_file(file_page, file_type, file_body)
 
    resp = pdf_http_response(file_body)
    return resp
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2019, 10:50
Ответы с готовыми решениями:

Flask request.get_json()
Всем привет. Сделал декоратор, который должен принимать JSON-строку из html form. ...

Ajax post request error
Проблема такая: пытаюсь настроить отправку комментариев к посту посредством аякса views.py: ...

Request на Python через Selenium
Подскажите, пожалуйста, как я могу написать код, через Selenium, а не с requests &gt;&gt;&gt; import...

CSRF verification failed. Request aborted
Есть два представления: def RegEnd(request): #Здесь совершаем действия по чтению ПОСТ...

Модуль request не соединяется через HTTPS прокси
Стоит задача, разработать парсер некого сайта. При частых обращениях к сайту возможен бан. Для...

11
Рыжий Лис
Просто Лис
1400 / 651 / 415
Регистрация: 17.05.2012
Сообщений: 2,525
Записей в блоге: 8
16.01.2019, 11:45 2
Цитата Сообщение от SPNick Посмотреть сообщение
коллеги говорят выбрасывает ошибку 400
Может почитать логи сервера?
0
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
16.01.2019, 14:34  [ТС] 3
Лучший ответ Сообщение было отмечено Рыжий Лис как решение

Решение

Рыжий Лис, попросил посмотреть, ничего не нашли. На сервере Python в логах IIS тоже ничего интересного.

Если у меня в Фидлере в ответе нет "boundary" - это нормально? В запросе он просто есть. Структуры запроса и ответа различаются, не ясно как должно быть (впервые с вебсервисом сталкиваюсь, еще и на python). В дебаге видно, что содержание файла пишется в поле "data".

Request.Response ошибка 400 bad request


Начали думать на все подряд - от различий кодировки 1С и Fiddler, до блокировки вложения реквеста прокси-сервером
0
Рыжий Лис
Просто Лис
1400 / 651 / 415
Регистрация: 17.05.2012
Сообщений: 2,525
Записей в блоге: 8
16.01.2019, 14:52 4
Цитата Сообщение от SPNick Посмотреть сообщение
Если у меня в Фидлере в ответе нет "boundary" - это нормально?
Нормально, конечно.

Веб-сервис работает по HTTP (не HTPPS)? Если да, то советую поставить wireshank, впрочем и других инструментов для отладки сетевых протоколов полно.

Есть рабочий пример веб-сервиса? Остаётся только одно: брать ваш веб-сервис и рабочий и сравнивать всё, начиная с заголовков ответа.
0
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
16.01.2019, 15:47  [ТС] 5
Рыжий Лис, рабочего нет, увы. Работает по HTTP.

Сейчас понял в чем дело.
Я писал код по реквесту, который приходил из Фидлера (не знаю как так получилось). А из 1С приходит сообщение, которое отличается от Фидлеровского. Тут ничего нет в flask.request.files, data тоже пусто. Вот и рушилось все при попытке вычислить
Python
1
file_data = flask.request.files[u'fieldNameHere']
Сижу раскрываю все ветви объекта flask.request, пытаюсь найти где лежит boundary (binary) объект. Пока ничего не нахожу, спрятали (где-то он должен быть, на скрине видно начало данных) о_О

Request.Response ошибка 400 bad request
0
Рыжий Лис
Просто Лис
1400 / 651 / 415
Регистрация: 17.05.2012
Сообщений: 2,525
Записей в блоге: 8
16.01.2019, 15:52 6
А говорил, что в логах всё хорошо

Да сниффером уже тыкни во входящий http-запрос к серверу — быстрее найдёшь данные. Они, кстати, скорей всего тупо лежат в теле POST-запроса бинарником.

Добавлено через 1 минуту
Python
1
request.data
0
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
16.01.2019, 15:53  [ТС] 7
Рыжий Лис, приложил картинку выше. Сниффером - это вирешарком?
0
Рыжий Лис
Просто Лис
1400 / 651 / 415
Регистрация: 17.05.2012
Сообщений: 2,525
Записей в блоге: 8
16.01.2019, 15:57 8
Python
1
data = request.stream.read()
Добавлено через 1 минуту
Цитата Сообщение от SPNick Посмотреть сообщение
Сниффером - это вирешарком?
Да любым.

Впрочем, моя догадка верна: бинарник тупо лежит в теле post-запроса. Попробуй два моих варианта выше.

Добавлено через 2 минуты
И третий вариант
Python
1
request.get_data()
Какой-нибудь да должен выдать сырые данные из запроса.
1
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
16.01.2019, 16:02  [ТС] 9
Рыжий Лис, эээх
Python
1
2
3
data1 = flask.request.data дает # дает ''
data2 = flask.request.stream.read() # дает ''
data3 = flask.request.get_data() # дает ''
0
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
17.01.2019, 14:54  [ТС] 10
Так и не вытащить.
Скрин из WireShark:
Request.Response ошибка 400 bad request

в каком-то виде бинарник там все же есть
0
SPNick
20 / 16 / 15
Регистрация: 21.07.2015
Сообщений: 233
Завершенные тесты: 3
17.01.2019, 15:27  [ТС] 11
Неизвестно почему, но начало работать. Думаю подкрутили на стороне 1С но никто не признается.
В request.files появилось вложение, успешно получаю и сохраняю его на сервере.

Рыжий Лис, спасибо за помощь.

Python
1
2
3
4
5
6
7
8
9
10
11
12
@app.route('/viewer', methods=['GET', 'POST'])
def viewer_method():
    file_page = int(flask.request.args.get(u'numpage'))
    file_type = flask.request.args.get(u'type')
    file_data = flask.request.files[u'datafile']
    file_body = file_data.read()
    file_decoded_body = base64.decodestring(file_body)
 
    save_temp_file(file_page, file_type, file_decoded_body)
 
    resp = pdf_http_response(file_decoded_body)
    return resp
0
Volexovich
199 / 175 / 29
Регистрация: 24.10.2011
Сообщений: 698
18.01.2019, 11:42 12
Тупо сервер перезапустили, обнова накатилась и сервисы заработали как надо.
0
18.01.2019, 11:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2019, 11:42

Отправка Request payload через Python requests
Помогите плиз отправить запрос такого типа(нижний прямоугольник) запрос выполняется к php скрипту...

Request и строки
from requests import request name = input('Введите расположение и название файла: ') will_open =...

не получается медот urllib.request
Доброго времени суток! На офф документации python есть такое место...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru