2016-07-29 12 views
1

ich Net::HTTP::Post bin mit einem Antrag auf einen vorher festgelegten URL zu senden, etwa so:Senden mehrerer String-Parameter zu schreiben Anfrage in Rails

my_url = '/path/to/static/url' 
my_string_parameter = 'objectName=objectInfo' 
my_other_string_parameter = 'otherObjectName=otherObjectInfo' 

request = Net::HTTP::Post.new(my_url) 
request.body = my_string_parameter 

aber ich weiß, dass my_url zwei String-Parameter erwartet. Ich habe beide Parameter bereit (sie sind statisch erzeugt), um übergeben zu werden. Gibt es eine Möglichkeit, mehrere Strings - sowohl my_string_parameter als auch my_other_string_parameter an eine Post-Anfrage über Ruby on Rails zu übergeben?

EDIT: Aus Gründen der Klarheit werde ich alles auf eine organisierte Art und Weise neu zu erklären. Im Grunde, was ich habe, ist

my_url = 'path/to/static/url' 
# POST requests made to this url require 2 string parameters, 
# required_1 and required_2 
param1 = 'required_1=' + 'param1_value' 
param2 = 'requred_2=' + 'param2_value' 
request = request.NET::HTTP::Post.new(my_url) 

Wenn ich request.body = param1 versuchen, dann als erwartete ich einen Fehler sagen „Erforderlich String-Parameter‚required_2‘ist nicht vorhanden“. Gleiches mit request.body=param2, der gleiche Fehler erscheint mit der Aufschrift "required_1" ist nicht vorhanden. Ich frage mich, ob es eine Möglichkeit gibt, BEIDE Parameter an request.body zu übergeben? Oder etwas ähnliches?

+1

Geben Sie ein Beispiel für 'my_url'- und' my_string_parameter'-Variablen/Methoden an. – retgoat

+0

Ich habe ein paar mehr Details hinzugefügt, wollte aber nicht zu viel verraten. – swurv

+0

Sie möchten POST auf lokalen Controller? – retgoat

Antwort

0

Sie können es so senden.

data = {'params' => ['parameter1', 'parameter2']} 
request = Net::HTTP::Post.new(my_url) 
request.set_form_data(data) 
+0

Hm, das schien nicht zu funktionieren, weil die URL bestimmte Namen für die Parameter benötigt, etwa param_1_name = param_1_value und param_2_name = param_2_value – swurv

+0

Bitte editieren Sie die Frage mit den spezifischen Anforderungen. – Pramod

+0

Ich habe den Beitrag aktualisiert! – swurv

0

Wenn Ihr params sind string:

url = '/path/to/controller_method' 
my_string_parameter = 'objectName=objectInfo' 
my_other_string_parameter = 'otherObjectName=otherObjectInfo' 

url_with_params = "#{url}?#{[my_string_parameter, my_other_string_parameter].join('&')}" 

request = Net::HTTP::Post.new(url_with_params) 

Wenn Ihr params-Hash sind Es wäre einfacher, diese

your_params = { 
    'objectName' => 'objectInfo', 
    'otherObjectName' => 'otherObjectInfo' 
} 
url = '/path/to/controller_method' 
url_with_params = "#{url}?#{your_params.to_query}" 
request = Net::HTTP::Post.new(url_with_params) 
+0

Wenn ich eines dieser versuche, bekomme ich "undefined Methode' Bytesize 'für # " – swurv

+0

Ist dieser Link hilfreich http://StackOverflow.com/A/21799896/1789479 –

0

Versuchen.

uri = URI('http://www.example.com') 
req = Net::HTTP::Post.new(uri) 
req.set_form_data('param1' => 'data1', 'param2' => 'data2') 

Alternative

uri = URI('http://www.example.com/') 
res = Net::HTTP.post_form(uri, 'param1' => 'data1', 'param2' => 'data2') 
puts res.body 

Weitere request wie Get oder Patch Sie This offical doc verweisen.

+0

Hm, ich benutze kein Formular also nicht sicher, ob das in diesem Fall gilt. – swurv

+0

'post_form' ist eine HTTP-Klasse Methode, Sie müssen nur einen Wert übergeben – hgsongra

Verwandte Themen