Rails: куки с Net :: HTTP - PullRequest
       11

Rails: куки с Net :: HTTP

0 голосов
/ 26 июля 2011

У меня есть два приложения rails App1 и App2 , которые работают по разным URL, но на одной машине App1 получить некоторые данные, используя Net::HTTP из App2 . Что мне нужно сделать, это установить cookie в App2 , когда запрос сделан из App1 . В настоящее время он не устанавливает cookie. Нужно ли добавлять заголовок в App1 при отправке запроса на App2 , или как?

Вот код для извлечения контента:

def get_content(url)

    uri = URI.parse(url)

    params = Hash[*uri.query.split("&").map {|part| part.split("=") }.flatten]

    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Get.new(uri.path)
    request.set_form_data( params )
    request = Net::HTTP::Get.new( uri.path+ '?' + request.body )

    if uri.scheme == "https"  # enable SSL/TLS
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    http.start do
      http.request(request) do|res|
        return res.body
      end
    end
end

Пожалуйста, совет.

1 Ответ

2 голосов
/ 26 июля 2011

первый вопрос: где вы хотите разместить куки?На клиенте, который просматривает ваш сайт?

Ваш запрос выглядит так:

Клиент - [веб-браузер] -> Приложение 1 - [net :: http] ->App2

Если это поток, вы должны прокси-файл cookie:

def get_content(url)

    uri = URI.parse(url)

    params = Hash[*uri.query.split("&").map {|part| part.split("=") }.flatten]

    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Get.new(uri.path)
    request.set_form_data( params )
    request = Net::HTTP::Get.new( uri.path+ '?' + request.body )

    if uri.scheme == "https"  # enable SSL/TLS
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    http.start do
      http.request(request) do |res|
        # yummy, parse some cookies here
        app2_cookies  = CGI::Cookie.parse(res['Set-Cookie']);

        app2_cookies.each do |c_name, c_cookie|
          # this is the cookies object from rails! Make sure this is accessible here!
          # the cookie will now be set on the client side
          cookies[c_name] = c_cookie.value
        end

        return res.body
      end
    end
end

Убедитесь, что вам требуется CGI :: Cookie

Вот документы:

http://www.ruby -doc.org / stdlib / libdoc / net / http / rdoc / classes / Net / HTTPHeader.html # M001307

http://ruby -doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI/Cookie.html#M000170

...