2015-09-15 11 views
1

Im использованием как API консоли хром REST и почтальона, чтобы отправить запрос на запись к моему серверу (под управлением Nginx и Symfony2)POST из REST консоли воспринимается как GET сервером

Сво очень простой запрос, просто разместив на URL с пустым телом. Если этот запрос выполняется с другого сервера по HTTP-запросу, он будет регистрироваться как POST. Попытка POST с консолей api регистрируется как GET в моих журналах доступа nginx и возвращает 405 метод не допускается.

Если я использую curl, я изначально получаю 301 Moved Permently, поэтому мне нужно использовать -L для переадресации. Я не уверен, что это стандартный Symfony или если он выполняет запрос.

Я нашел некоторые проблемы с запросом на завивание, но я не уверен, как их разрешить.

$ curl -v -L -d "1EepG1a63X" xxx.io/api/convert_mov/ 
* Trying xx.76.9.82... 
* Connected to xxx.io (xx.76.9.82) port 80 (#0) 
> POST /api/convert_mov/ HTTP/1.1 
> Host: xxx.io 
> User-Agent: curl/7.43.0 
> Accept: */* 
> Content-Length: 10 
> Content-Type: application/x-www-form-urlencoded 
> 
* upload completely sent off: 10 out of 10 bytes 
< HTTP/1.1 301 Moved Permanently 
< Server: nginx/1.6.2 
< Date: Tue, 15 Sep 2015 09:00:43 GMT 
< Content-Type: text/html 
< Content-Length: 184 
< Connection: keep-alive 
< Location: https://xxx.io/api/convert_mov/ 
< 
* Ignoring the response-body 
* Connection #0 to host xxx.io left intact 
* Issue another request to this URL: 'https://xxx.io/api/convert_mov/' 
* Switch from POST to GET 
* Found bundle for host xxx.io: 0x7fcad9c14e70 
* Trying xx.76.9.82... 
* Connected to xxx.io (xx.76.9.82) port 443 (#1) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 
* Server certificate: xxx.io 
* Server certificate: DigiCert SHA2 Secure Server CA 
* Server certificate: DigiCert Global Root CA 
> GET /api/convert_mov/ HTTP/1.1 
> Host: xxx.io 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
< HTTP/1.1 404 Not Found 
< Server: nginx/1.6.2 
< Content-Type: text/html; charset=UTF-8 
< Transfer-Encoding: chunked 
< Connection: keep-alive 
< X-Powered-By: PHP/5.5.25 
< Cache-Control: no-cache 
< Date: Tue, 15 Sep 2015 09:00:43 GMT 

ответ

2

Если присмотреться, вы увидите ваш запрос с HTTP. Затем ваш сервер отправляет перенаправление на ваш сайт HTTPS. И перенаправление 301 не сохраняет метод запроса. Вы ДОЛЖНЫ правильно отправлять все ваши запросы против HTTPS.

+0

Интересно, я думал, по крайней мере, что касается протокола, этот оригинальный 'метод' будет сохранен. Полезная информация ... –

+0

Хорошо заметили. Это было бы более легкое решение haha ​​ – JackalopeZero

+0

Ха-ха, IE действительно делает нашу жизнь намного веселее: D –

-1

Похоже, это может быть исправлено с some extra curl options, но не помогает с консолью.

curl -L -XPOST http://example.com/some-form-handler 

Хитрость заключается в том, что -X аргумент говорит локон всегда использовать указанный метод HTTP. Чтобы заставить завиток переключаться с POST на GET, вам нужно сделать curl неявно делать POST, например, с флагом -d.

Так что мой окончательный запрос используется -L следовать редиректам, -d для данных и -XPOST заставить POST через редиректы:

curl -L -d "1EepG1a63X" -XPOST xxx.io/api/convert_mov