2012-01-26 5 views
0

URL을 사용하여 http를 얻습니다. http://localhost/add?add_key[0][key]=1234&add_key[0][id]=1. 나는 깔끔한 params 해시 { "add_key"=> { "0"=> { "key" => "1234", "id"=> "1"}}. 내가rails params 해시 문자열에 해시 : 문자열 해시

new_uri = URI.parse("http://10.10.12.1/test") 
res = Net::HTTP.post_form new_uri,params 

게시물을 처리하는 서버를 사용하여 다른 서버에이를 게시하려고하지만 경우

{"add_key"=>"0key1234id1"} 

이 post_form처럼 보이는 요청에이 매개 변수를보고있는 것은 문자열의 해시 문자열이 필요합니다. 어떻게 내가 fine manual에서

{"add_key[0][key]" => "1234", add_key[0][id]" => "1"} 

답변

2

에 PARAMS 해시를 변환 할 :

post_form (URL, PARAMS) 지정된 URI 객체에
게시물 HTML 양식 데이터를. 양식 데이터는 String에서 String으로의 해시 매핑으로 제공되어야합니다.

그렇다면 params 일 필요가 있습니다.

{"add_key"=>{"0"=>{"key"=>"1234", "id"=>"1"}} 

을 다음 재귀 post_form 상하는 그러나 그것은 무의미한 바쁜 일이 많이있을 것이라고 평탄화 된 형식으로 그 뒤를 팩 :

당신은 당신의 컨트롤러에서 구문 분석 params을 잡을 수 있습니다. 이 작업을 수행하는 쉬운 방법은 원시 URL을 잡고 URI.parseCGI.parse, 컨트롤러에서이 같은 뭔가 스스로를 구문 분석하는 것입니다 :

u = URI.parse(request.url) 
p = CGI.parse(u.query) 

p{"add_key[0][key]" => "1234", "add_key[0][id]" => "1"} 당신을 떠나 당신은 그 손 수있는 그런 p ~ Net::HTTP.post_form.

+0

그 덕분에 좋았어요! 요청을 다른 서버로 리디렉션하는 방법이 있습니까? – Vasu

+0

@ 바 수 : 아무 것도 떠오르지 않지만 그럴 필요가 없습니다. POST로 리디렉션하면 제대로 작동하는지 알 수 없습니다. –

+1

원래 요청이 POST 인 경우 CGI.parse (request.raw_post) – Vasu