Передача данных через URL в другое приложение в Ruby on Rails

#ruby-on-rails #ruby #rubygems

#ruby-on-rails #ruby #rubygems

Вопрос:

Я новичок в Ruby on Rails, я хотел бы передать некоторые данные в мое другое приложение. В настоящее время я использую httpparty gem, но у меня возникают трудности при отправке больших данных, таких как текст, поэтому мне было интересно, есть ли какой-либо рекомендуемый gem, который преобразует обычный HTML-текст в формат, который я могу отправить, или простой способ сделать

Что я пытаюсь сделать:

например:

 def abc_action 
    contents = params[:content]
    response = HTTParty.post("http://abc.go.com?contents=#{contents}")

end
  

допустим, параметры содержимого включают много абзацев, таких как

«Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum»

Спасибо за вашу помощь.

Комментарии:

1. В чем проблема с данным кодом?

2. Проблема в том, что параметры содержимого включают ‘amp;’ или апостроф … и т.д. Это не отправляет содержимое должным образом, поэтому было интересно, есть ли какой-либо драгоценный камень или какой-либо способ, который автоматически преобразует текст в формат URL

3. И что происходит вместо этого? Пожалуйста, поделитесь некоторыми примерами, в которых вы сталкиваетесь с проблемами, и ожидаемым результатом

4. может быть, у вас какие-то проблемы с URI? Вы можете преобразовать текст следующим образом: URI.encode("Hello world amp;") . После отправки полезной нагрузки вы можете декодировать это с помощью URI.decode("Hello world amp;") . Все специальные символы останутся нетронутыми

5. HTTParty при надлежащем использовании это будет обработано за вас. попробуйте HTTParty.post("http://abc.go.com",body: {contents: params[:content]}) вместо этого. HTTParty::post . Если это должно быть добавлено к URL, который кажется нечетным для запроса POST, тогда доступ будет следующим: HTTParty.post("http://abc.go.com",query: {contents: params[:content]})

Ответ №1:

Из того, что я могу сказать, вы получаете «содержимое» из запроса POST на вашем контроллере, который, как я предполагаю, пришел из формы, созданной вами в одном из ваших представлений. В этом случае вы могли бы вообще пропустить контроллер и просто указать действие вашей формы наhttp://abc.go.com. Вы можете прочитать о том, как это сделать здесь.

 <%= form_tag("http://abc.go.com", method: "post") do %>
  <%= label_tag(:contents, "Contents: ") %>
  <%= text_area_tag(:contents) %>
  <%= submit_tag("Submit") %>
<% end %>
  

Таким образом, браузер пользователя отправляет запрос, и вам не нужно иметь HTTP-клиент на вашем контроллере. Важно знать, что вы должны позаботиться о маркере подлинности вручную и настроить abc для перенаправления обратно в ваше исходное приложение или куда угодно с помощью http 302.

Если abc является приложением rails, то контроллер может выглядеть следующим образом:

 class SomeController < ApplicationController
protect_from_forgery except: :create

def create
  #use strong params not params[:contents]
  @something = SomeModel.new(contents: params[:contents])

  if @something.save  
    format.html {redirect_to "http://original_url/place_to_go_after_content_submit")
  end
end