Как передать cookie в приложение Sinatra с помощью curl? - PullRequest
1 голос
/ 22 апреля 2010

Я использую код из примера под названием «Пример чуть большего размера» из этого урока http://rubylearning.com/blog/2009/09/30/cookie-based-sessions-in-sinatra/, чтобы выяснить, как отправить файл cookie в приложение Sinatra, но я не могу понять, как установить значения правильно

Когда я устанавливаю имя «brandon» в приложении, оно создает cookie со значением BAh7BiIJdXNlciIMYnJhbmRvbg%3D%3D%0A, которое является кодировкой URL (http://ostermiller.org/calc/encode.html) значения BAh7BiIJdXNlciIMYnJhbmRvbg==

Используя это значение, я могу правильно отправить файл cookie в приложение

curl -b "rack.session=BAh7BiIJdXNlciIMYnJhbmRvbg==" localhost:9393

Я почти уверен, что значение является кодировкой base64 хеша ruby ​​для сеанса, поскольку документы (http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html) скажем

Сеанс представляет собой Ruby Hash, который хранится в виде маршалированных данных в кодировке base64 и имеет значение: ключ (по умолчанию: rack.session).

Я думал, что это значит, что все, что мне нужно было сделать, это кодировать base64 {"user"=>"brandon"} и использовать его в команде curl. К сожалению, это создает значение, отличное от BAh7BiIJdXNlciIMYnJhbmRvbg==. Затем я попытался взять закодированное в base64 значение и декодировать его в различных декодерах base64 онлайн, но это привело к появлению странных символов (прямоугольника и других), поэтому я не знаю, как воссоздать значение, чтобы даже закодировать его.

Итак, мой вопрос: знаете ли вы, какие символы / формат мне нужны, чтобы получить правильную кодировку base64, и / или знаете ли вы другой способ передать значение с помощью curl, чтобы оно регистрировалось как надлежащий файл cookie для приложения Sinatra?

1 Ответ

1 голос
/ 23 апреля 2010

Если вы имеете в виду, что имя пользователя и пароль вводятся в форме на странице входа в систему, тогда cURL может "отправить" эту форму, например:

curl -d "username = miniape & password = SeCrEt" http://whatever.com/login

, и если вы хотите сохранить возвращаемый файл cookie, вы можете указать файл cookie:

curl -c cookies.txt -d "username = miniape & password = SeCrEt" http://whatever.com/login

и использовать эти файлы cookie в последующих запросах, которые вы делаете:

curl -b cookies.txt -d "username = miniape & password = SeCrEt" http://whatever.com/login

или сделать оба, есливы хотите отправлять и получать куки:

curl -b cookies.txt -c cookies.txt -d "username = miniape & password = SeCrEt" http://whatever.com/login

обнаружил это в метафильтре

...