Я делаю запрос POST для API REST для загрузки файла. В Почтальоне все работает нормально. Я добавляю базовую авторизацию и настраиваемый токен CSRF (XSRF), который я получаю с сервера.Запрос POST с CSRF работает в Postman, но сбой в cURL
Я хочу сделать то же самое, используя cURL. Я скопировал код из Postman, и он, похоже, не работает. Я считаю, что ошибка связана с CSRF, потому что если я отключу CSRF на сервере и сделаю тот же вызов cURL без токена CSRF, все будет хорошо.
Теперь еще некоторые детали: Вот что команда для Curl, который Почтальон дает:
curl -X POST -H "XSRF: 79f51981-8e85-4e26-be1b-bf63aed92a42" -H "Authorization: Basic bbhjbjb=" -H "Cache-Control: no-cache" -H "Postman-Token: 76a7a43b-f407-15a2-aaff-5242b44d0f47" -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" -F "[email protected]:\Downloads\hello-world.zip" "http://host:port/api/import"
И это ответ я получаю с --verbose
- тайм-аут на поиск имени не поддерживается
- Trying :: 1 ...
- Подключен к localhost (:: 1) порт 7777 (# 0)
- POST/API/импорта HTTP/1.1
- Ведущий: локальный: 7777
- User-Agent: завиток/7.47.1
- Accept: /
- XSRF: 79f51981-8e85-4e26- be1b-bf63aed92a42
- Авторизация: Basic bbhjbjb =
- Cache-Control: нет кэша
- Почтальон-Токен: 76a7a43b-f407-15a2-aaff-5242b44d0f47
- Контент-длина: 31281
- Ожидаем: 100-продолжить
- Тип контента: multipart/form-data; граница = ---- WebKitFormBoundary7MA4YWxkTrZu0gW; граница = ------------------------ 742d3475ac5f6aba
- < HTTP/1.1 302 Найдено
- < Set-Cookie: JSESSIONID = 1qfjmbntrthxll; Путь =/api < Истекает: Чт, 01 янв 1970 00:00:00 GMT
- < Set-Cookie: XSRF = b29bd143-cc80-49ad-b495-711125678o; Path = /; Expires = Thu, 15-Dec-2016 10:28:46 GMT
- < XSRF: b29bd143-cc80-49ad-b495-711125678o < Расположение:
- http://localhost:7777/api/login/error.jsp?errorMessage=Access Denied
- < Content-Length: 0
- < Сервер: Jetty (9.2.17.v20160517)
- ошибка HTTP до завершения отправки, прекратить отправку
- соединение Закрытие 0
Я вероятно, отсутствует что-то очень очевидное здесь, но пока не знаю. Похоже, что я перенаправлен на страницу входа, а не правильно аутентифицирован, но не знаю, почему (я отправляю XSRF в cURL).Я также попытался добавить sessionid в cURL - тоже не работал.
Любые идеи и указания о том, где искать, были бы очень благодарны !!!
Вы пробовали использовать '-L' вариант (из 302 нашел возвращения с сервера) ? –
Спасибо за комментарий! Я попытался с -L получить аналогичный результат примерно в 50 раз: «* Соединение №1 для размещения локального хоста осталось нетронутым * Выдать другой запрос этому URL-адресу:« http: // localhost: 7777/api/login/error.jsp? ErrorMessage = Access + Denied ' * Найден пакет для хоста localhost: 0x285 [can конвейер] * Повторное использование существующего соединения! (# 1) с хостом localhost * Подключено к localhost (:: 1) порт 7777 (# 1) " – lenach87
лучше всего предположить, что токен XSRF является одноразовым токеном, и вы используете его сначала в почтальоне, и он отлично работает, тогда вы используете тот же токен при завивке, а не обновляете его, и он терпит неудачу. как вы получаете токены XSRF? во всяком случае, получить 1, не используя его на почтальоне в первую очередь, проверить, работает ли это – hanshenrik