То, что я видел при написании моего собственного аналогичного сценария "post-then-get", - это то, что ruby / Curb (я использую версию 0.7.15 с ruby 1.8), кажется, игнорирует поля cookiejar / cookiefile в Curl :: Легкий объект. Если я установлю одно из этих полей и http_post успешно завершится, файл cookiejar или cookiefile не будет создан. Кроме того, curl.cookies по-прежнему будет нулевым после вашего curl.http_post, однако файлы cookie установлены в объекте curl. Обещаю:)
Я думаю, что ты ошибаешься здесь:
curl = Curl::Easy.perform(2nd url)
В документации обуздания говорится, что это создает новый объект. Этот новый объект не имеет ни одного из ваших существующих файлов cookie. Если вы измените свой код так, чтобы он выглядел следующим образом, я считаю, что он должен работать. Я также удалил curl.perform для первого url, так как curl.http_post уже неявно выполняет "execute". В основном вы дважды заходили на http_post перед тем, как попробовать http_get.
curl = Curl::Easy.new(1st url)
curl.follow_location = true
curl.enable_cookies = true
curl.http_post(1st url,field)
curl.url = 2nd url
curl.http_get
code = curl.body_str
Если это все еще не работает для вас, вы можете проверить, устанавливается ли cookie, добавив
curl.verbose = true
до
curl.http_post
Ваш объект Curl :: Easy будет сбрасывать все заголовки, которые он получает в ответе от сервера на $ stdout, и где-то там вы должны увидеть строку, сообщающую, что он добавил / установил cookie. У меня сейчас нет примера вывода, но я постараюсь опубликовать продолжение вскоре.