Не могу принять сообщение в Синатре с помощью Curl - PullRequest
1 голос
/ 03 марта 2012

Просто возился с Синатрой и пытался запустить немного спокойного веб-сервиса.Ошибка, которую я получаю в данный момент, очень специфична.

Возьмите этот пример метода сообщения

post '/postMan/:someParam' do
    #Edited here. This code can be anything. 411 is still the response
    puts params[:someParam]

end

Кажется достаточно простым.Возьмите параметр, сделайте из него объект, затем сохраните его любым способом, который определяет метод сохранения объектов.

Вот что я использую для публикации данных с помощью Curl

$curl -I -X POST http://127.0.0.1/postman/123456
* 1010Единственная проблема, я получаю 411 обратно и понятия не имею, почему.Насколько я знаю, 411 требуется длина.Вот след
HTTP/1.1 411 Length Required 
Content-Type: text/html; charset=ISO-8859-1
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
Date: Fri, 02 Mar 2012 22:27:09 GMT
Content-Length: 303
Connection: close

Я не могу изменить сообщение curl любым способом.Так может ли кто-нибудь иметь способ установить длину содержимого, которое будет игнорироваться в sinatra?Или какое-то исправление, которое не включает изменение запроса curl?


Для записи не имеет значения, использую ли я параметры в методе Post или нет.Я мог бы иметь какой-то сумасшедший код внутри, он все равно выдаст ту же ошибку

Ответы [ 4 ]

2 голосов
/ 15 декабря 2015

Как уже говорили другие, WEBrick ошибочно требует, чтобы POST-запросы имели заголовок Content-Length. Я просто передаю пустое тело, потому что оно меньше печатается, чем в заголовке:

curl -X POST -d '' http://webrickwhyyounotakeemptyposts.com/
1 голос
/ 25 февраля 2014

WEBrick ошибочно требует, чтобы запросы POST включали заголовок Content-Length.

curl -H 'Content-Length: 0' -X POST http://example.com

Однако, как правило, запросы POST не требуют тела и, следовательно, не требуют заголовка Content-Length.

1 голос
/ 03 марта 2012

Ах. Попробуйте без -I. Вероятно, он отправляет запрос HEAD и поэтому не отправляет то, что вы ожидаете. Используйте -v, если хотите показать заголовки.

curl -v -X POST http://127.0.0.1/postman/123456

curl -v -X POST -d "key=val" http://127.0.0.1/postman/123456
0 голосов
/ 03 марта 2012

Вы уверены, что используете порт 80 для своего приложения? Когда я бегу:

ruby -r sinatra -e "post('/postMan/:someParam'){puts params[:someParam]}"

и сверните его:

curl -I -X POST http://127.0.0.1:4567/postMan/123456                                                                            
HTTP/1.1 200 OK
X-Frame-Options: sameorigin
X-XSS-Protection: 1; mode=block
Content-Type: text/html;charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: thin 1.3.1 codename Triple Espresso

все в порядке. Пришлось изменить URL-адрес на postMan, однако, ваш пример выбросил 404, потому что у вас было postman.

Вывод также был ожидаемым:

== Sinatra/1.3.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
123456
...