Как мне разобрать POST на моем сервере Rails 3.1 вручную? - PullRequest
1 голос
/ 22 октября 2011

Сценарий: у меня есть серверная модель на моей стороне Rails-сервера, и устройство Android пытается отправить некоторый контент на определенную плату через POST.Наконец, сервер должен отправить ответ на устройство Android.

Как мне разобрать POST вручную (или мне нужно)?Я не уверен, как обработать такой внешний запрос.Я заглянул в Metal, Middleware, HttpParty;но ни один из них, кажется, не соответствует тому, что я пытаюсь сделать.Причина, по которой я хочу разобрать его вручную, заключается в том, что некоторая информация, которую я хочу, не будет частью параметров.

Кто-нибудь знает способ решения этой проблемы?

Я также подумываю об использовании SSL позже, как это может повлиять на проблему?

Заранее спасибо!!:)

Ответы [ 2 ]

0 голосов
/ 24 января 2013

Я пытался сделать междоменный запрос из ie9 в мое приложение rails, и мне нужно было вручную проанализировать тело POST, потому что XDR-объект ie9 ограничивает contentType, который мы можем отправить text/plain, а не application/x-www-urlencoded (см. этот пост ). Первоначально я только что использовал хеш params, предоставленный контроллером, но как только я ограничил contentType и dataType в моем запросе ajax, этот хеш больше не содержал нужную информацию.

Следуя URL-адресу в комментарии выше ( ссылка ), я узнал, как восстановить эту информацию. Автор упоминает, что в контроллере rails у нас всегда есть доступ к переменной request, которая дает нам экземпляр ActionDispatch :: Request объекта . Я пытался использовать request.query_string, чтобы получить тело запроса, но это только вернуло пустую строку. Немного слежки в API, однако, обнаружили метод raw_post . Этот метод вернул именно то, что мне было нужно!

Чтобы "разобрать его вручную", вы можете перебрать строку, возвращаемую request.raw_post, и делать все, что хотите, но я не рекомендую этого. Я использовал Rack :: Utils.parse_nested_query, как предложено в ответе Артура Ганна на этот вопрос , чтобы проанализировать raw_post в хеш. Как только он будет в хеш-форме, вы можете добавить туда все, что вам нужно, а затем объединить его с хешем params. Это означало, что мне не нужно больше ничего менять в контроллере!

params.merge!(Rack::Utils.parse_nested_query(request.raw_post))

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 22 октября 2011

Не совсем точно, что вы подразумеваете под «вручную», сообщения обычно обрабатываются методами «create» или «update» в контроллере.Проверьте контроллер для вашей модели платы, и вы можете добавить код в соответствующий метод.Вы можете получить доступ к params с помощью хэша params.

Вы должны быть более точными в том, что вы пытаетесь сделать.:)

...