2012-11-11 4 views
1

Je dois poster en utilisant trois paramètres et un corps qui se compose de 512 octets. Je peux obtenir le droit du corps, mais je ne peux pas sembler obtenir les paramètres à prendre:Ruby HTTP Post contenant plusieurs paramètres et un corps

require 'net/http' 

@ip_address = Array['cueserver.dnsalias.com'] 
@cueserver = 0 
@playback = 'p1' 

def send_cuescript(data) 

    params = {'id' => '1', 'type' => "20",'dst' => 'RES' } 

    begin 
    url = URI.parse('http://'+ @ip_address[@cueserver] + '/set.cgi') 
    http = Net::HTTP.new(url.host, url.port) 

    response, body = http.post(url.path, params, data) 

    rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, 
      Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e 
    end   
response_array = [] 
puts 'got this value: ' + response.to_s 
response.body.each_byte { |e| response_array.push(e.to_s(16))} 
end 

data_array = Array.new(512, "\x80") 
send_cuescript(data_array.join) 

Je reçois une erreur de la initialize_http_header. Je sais qu'il doit y avoir un moyen de définir séparément les paramètres et le corps, mais je ne trouve aucune référence à cela.

Répondre

0

Pourquoi devez-vous envoyer une partie des paramètres dans l'url et une partie de celui-ci dans le corps? Si vous devez le faire, essayez

url = URI.parse ('http: //' + @ip_address [@cueserver] + '? /set.cgi' + params.to_param)

PS : to_param provient du support actif. Vous devez écrire le vôtre si vous n'utilisez pas de support actif.

+0

Merci Dean, je vais essayer. Je vais essayer de répondre à la question pourquoi. Ceci est un dispositif plus ancien conçu pour la lecture et le contrôle de l'éclairage en temps réel. Le développeur a développé une API basée sur la gestion de la mémoire et le stockage des données de la manière la plus efficace possible. Son autre logiciel d'interface utilisateur utilise Obj-C et je crois que la méthode post pour Obj-C est de niveau inférieur et il n'a pas rencontré ce problème. Il semble juste de tout enchaîner comme ceci: http: //url/set.cgi? Dst = RES & type = 11 & id = 1 & '512_bytes_here' et cela fonctionne pour lui. Ça ne semble pas marcher sur ruby ​​... – tsugua

Questions connexes