2010-06-06 10 views
6

Czy można jednocześnie przekazywać parametry GET i POST?Ruby: Czy net/http może jednocześnie wysyłać żądanie GET i POST?

uri = URI.parse("http://www.example.com/post.php?a=1&b=2") 

req = Net::HTTP::Post.new(uri.path, { 
    'Referer' => "http://www.example.com/referer", 
    'User-Agent'=> "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", 
    'Cookie' => $cookie 
}) 

req.set_form_data({ 
    'foo' => 'bar', 
    'bar' => 'foo' 
}) 

http = Net::HTTP.new(uri.host, uri.port) 
http.open_timeout = 40 
http.read_timeout = 20 

# Request page: 
begin 
    resp = http.request(req) 
rescue Exception 
    puts "Exception requesting the page; returning" 
end 

W skrypcie powyżej, tylko parametry POST wysyłane i zapytanie GET jest ignorowany

Odpowiedz

4

Podczas tworzenia żądania wystarczy, aby upewnić się zachować params GET na ścieżce:

req = Net::HTTP::Post.new("#{uri.path}?#{uri.query}", { 
    'Referer' => "http://www.example.com/referer", 
    'User-Agent'=> "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", 
    'Cookie' => $cookie 
}) 

Zauważ, że zamiast tylko uri.path, dołączam do niego ? i uri.query. To powinno przekazać parametry GET, a także parametry POST.

+0

Ty jesteś ratownikiem. Zmagałem się z tym problemem przez ostatnie godziny. – ganeshran

+0

Możesz także użyć 'uri.request_uri' do zbudowania łańcucha żądania z parametrami ścieżki i zapytania. – nates

Powiązane problemy