13 Stimmen

In Ruby müssen wir bei der Verwendung von "net/http" die URL und die Abfrage mit einem "?" verbinden.

Im folgenden Code müssen wir die url.path y url.query selbst mit Hilfe der ? Charakter? Gibt es einen eleganteren Weg, dies zu tun? Ich muss Folgendes verwenden net/http weil ich in manchen Situationen auch eine Zeichenkette für den Benutzer-Agenten in die Kopfzeile aufnehmen möchte.

require 'net/http'

url_string = 'http://www.time.gov/timezone.cgi?Pacific/d/-8'

url = URI.parse(url_string)

response = Net::HTTP.start(url.host, url.port) do |http|
  http.get(url.path + '?' + url.query)
end
puts response.body[/<td.*(\d\d:\d\d:\d\d)/, 1]

21voto

ctcherry Punkte 27220

Verwenden Sie die request_uri Methode für das URI-Objekt:

http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009499

Aktualisierte Version Ihres Codes:

require 'net/http'

url_string = 'http://www.time.gov/timezone.cgi?Pacific/d/-8'

url = URI.parse(url_string)

response = Net::HTTP.start(url.host, url.port) do |http|
  http.get(url.request_uri)
end
puts response.body[/<td.*(\d\d:\d\d:\d\d)/, 1]

9voto

Tobias Cohen Punkte 19666

Sie können verwenden URI#request_uri

Aus den Unterlagen:

Gibt den vollständigen Pfad für eine HTTP Anfrage zurück, wie es von Net::HTTP::Get erforderlich ist.

Wenn der URI eine Abfrage enthält, wird die vollständige Pfad URI#Pfad + '?' + URI#Abfrage. Andernfalls ist der Pfad einfach URI#Pfad.

3voto

DigitalRoss Punkte 138823

Net/http mag eine gute Grundlage sein, aber es ist nicht sehr benutzerfreundlich.

Wenn Ihr Kunde auf einen gut gestalteten Dienst zugreift, dann ist etwas wie ActiveResource , rest-client 或いは HTTParty eine bessere Wahl sein wird. Sie könnten auch ein anwendungsunabhängiges Modul schreiben, das net/http auf eine Weise zivilisiert, die für Sie gut funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X