curl: redirect 302: не менять метод с POST на GET - PullRequest
1 голос
/ 25 марта 2020

У меня есть url(/add_item), на который я отправляю данные методом POST. После завершения задачи она будет перенаправлена ​​на url2 (/show_items)

I с помощью команды curl (метод POST, а также --location используется для автоматического перенаправления). Ниже приведена команда

$ curl --verbose --location --request POST 'http://127.0.0.1:8000/add_item' \
--header 'Content-Type: application/json' \
--data-raw '{
"item" : "new"
}'

Вывод

Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> POST /add_item HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 18
> 
* upload completely sent off: 18 out of 18 bytes
< HTTP/1.1 302 Found
< Date: Wed, 25 Mar 2020 08:02:37 GMT
< Server: WSGIServer/0.2 CPython/3.7.3
< Content-Type: text/html; charset=utf-8
< Location: /show_items
< Content-Length: 0
< X-Content-Type-Options: nosniff
< 
* Connection #0 to host 127.0.0.1 left intact
* Issue another request to this URL: 'http://127.0.0.1:8000/show_items'
* Switch from POST to GET
* Found bundle for host 127.0.0.1: 0x56410d38f180 [can pipeline]
* Could pipeline, but not asked to!
* Re-using existing connection! (#0) with host 127.0.0.1
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> POST /show_items HTTP/1.1
> Host: 127.0.0.1:8000
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: application/json
> 
< HTTP/1.1 500 Internal Server Error
< Date: Wed, 25 Mar 2020 08:02:37 GMT
< Server: WSGIServer/0.2 CPython/3.7.3
< Content-Type: text/html
< Content-Length: 99523
< Vary: Cookie
< X-Content-Type-Options: nosniff
< 
<!DOCTYPE html>
<html lang="en">
<head>
<body>
....
</body>
</head>
</html>

Здесь я заметил, что

* Re-using existing connection! (#0) with host 127.0.0.1
* Connected to 127.0.0.1 (127.0.0.1) port 8000 (#0)
> POST /show_items HTTP/1.1

Так как для его < HTTP/1.1 302 Found curl следует использовать метод GET вместо ПОСЛЕ. Но его использование POST. Как остановить это поведение.

Похоже, он пытается использовать GET

* Issue another request to this URL: 'http://127.0.0.1:8000/show_items'
* Switch from POST to GET

Но позже возвращается к POST

Как обеспечить использование GET

1 Ответ

0 голосов
/ 26 марта 2020

Примечание: ненужное использование -X или --request, POST уже выведено.

Приведенная выше причина === удалить --request POST также "--data-raw" должно быть достаточно для запуска запроса POST без этого нежелательного эффекта.

ответ взят из https://github.com/curl/curl/issues/5145#issuecomment -603899140

Так что приведенная ниже команда работает хорошо:

$ curl --verbose --location 'http://127.0.0.1:8000/login_register_password/api/user_login_via_otp_form_otp' \     
--header 'Content-Type: application/json' \
--data-raw '{
"item" : "new"
}'
...