2016-04-05 2 views
0

Я пытался Django JWT Auth и заметил, что URL-адрес хорошо подходит для одного типа сообщений, но не отвечает на него другим, но я могу понять, почему.Django JWT Auth, почему один запрос работает, а другой нет

В принципе, если я использую локоны POST называет в readme.md, все идет в соответствии с запланированным:

$ curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"abc123"}' http://localhost:8000/api-token-auth/ 

но если я использовать другой тип завиток POST с той же информацией, что Безразлично» т работы:

$ curl -d 'username=admin&password=abc123' http://localhost:8000/api-token-auth/ 

Я знаю, что «Content-Type» является Diferent, но не запрос принимается в том же порядке, что они оба хорошо сформированы сообщения?

ответ

1

Вариант Curl's -d фактически отправляет запрос, как будто это веб-браузер. Я предполагаю, что URL-адрес, который вы тестируете, не имеет стандартной веб-формы, поэтому он не может обработать запрос.

TL; DR Довольно точно Django JWT Auth не поддерживает тип контента application/x-www-form-urlencoded.

От завитка руководства:

-d --data (HTTP) Отправляет указанные данные в запросе POST на сервер HTTP , таким же образом, что браузер, когда пользователь имеет заполняется в форме HTML и нажимает кнопку отправки. Это будет вызывать завихрение для передачи данных на сервер с использованием типа контента application/x-www-form-urlencoded. Сравните с -F, --form.

Надеюсь, это поможет!

+0

Другой родственный вопрос. Если вы выполняете POST в Django, используя «application/json», Django POST-запрос-парсер по умолчанию не помещает запрос. POST-словарь параметров JSON. Верный? (это только «магически» делает это по умолчанию, если вы публикуете как приложение браузера/x-www-form-urlencoded) – LPS

+0

Я не уверен, что понимаю ваш вопрос, но если данные, которые вы ищете, t появляется в request.POST, это должно быть в request.body. Источник: https://docs.djangoproject.com/en/1.9/ref/request-response/ – nathanshimp

+0

Да, это отображается в request.body. Я хотел сказать, что по умолчанию Django не загружает параметры JSON (Content-Type: applcation/json) в словарь request.POST. Как и в случае с обычным POST, где заголовок Content-Type является приложением/x-www-form-urlencoded, а данные тела поступают в следующую форму: «username = some & password = some». Я прав? – LPS

Смежные вопросы