class Net::HTTP
Die Klasse Net::HTTP bietet eine reichhaltige Bibliothek, die den Client in einem Client-Server-Modell implementiert, das das HTTP-Request-Response-Protokoll verwendet. Informationen zu HTTP finden Sie unter
Über die Beispiele
Die hier angenommenen Codebeispiele erfordern, dass net/http geladen wurde (was auch uri lädt)
require 'net/http'
Viele Codebeispiele hier verwenden diese Beispiel-Websites
Einige Beispiele gehen auch von diesen Variablen aus
uri = URI('https://jsonplaceholder.typicode.com/') uri.freeze # Examples may not modify. hostname = uri.hostname # => "jsonplaceholder.typicode.com" path = uri.path # => "/" port = uri.port # => 443
So dass Beispielanfragen geschrieben werden können als
Net::HTTP.get(uri) Net::HTTP.get(hostname, '/index.html') Net::HTTP.start(hostname) do |http| http.get('/todos/1') http.get('/todos/2') end
Ein Beispiel, das eine modifizierte URI benötigt, dupliziert zuerst uri und modifiziert dann die Kopie
_uri = uri.dup _uri.path = '/todos/1'
Strategien
-
Wenn Sie nur wenige GET-Anfragen stellen möchten, sollten Sie
OpenURIverwenden. -
Wenn Sie nur wenige Anfragen aller Art stellen möchten, sollten Sie die verschiedenen Singleton-Komfortmethoden dieser Klasse verwenden. Jede der folgenden Methoden startet und beendet automatisch eine Sitzung, die eine einzelne Anfrage sendet
# Return string response body. Net::HTTP.get(hostname, path) Net::HTTP.get(uri) # Write string response body to $stdout. Net::HTTP.get_print(hostname, path) Net::HTTP.get_print(uri) # Return response as Net::HTTPResponse object. Net::HTTP.get_response(hostname, path) Net::HTTP.get_response(uri) data = '{"title": "foo", "body": "bar", "userId": 1}' Net::HTTP.post(uri, data) params = {title: 'foo', body: 'bar', userId: 1} Net::HTTP.post_form(uri, params) data = '{"title": "foo", "body": "bar", "userId": 1}' Net::HTTP.put(uri, data)
-
Wenn die Leistung wichtig ist, sollten Sie Sitzungen in Betracht ziehen, die den Anfrage-Overhead reduzieren. Diese Sitzung unterstützt mehrere Anfragen für HTTP-Methoden und WebDAV-Methoden
Net::HTTP.start(hostname) do |http| # Session started automatically before block execution. http.get(path) http.head(path) body = 'Some text' http.post(path, body) # Can also have a block. http.put(path, body) http.delete(path) http.options(path) http.trace(path) http.patch(path, body) # Can also have a block. http.copy(path) http.lock(path, body) http.mkcol(path, body) http.move(path) http.propfind(path, body) http.proppatch(path, body) http.unlock(path, body) # Session finished automatically at block exit. end
Die oben genannten Methoden sind Komfortmethoden, die über ihre wenigen Argumente eine minimale Kontrolle über die Anfragen ermöglichen. Für mehr Kontrolle sollten Sie Anfrageobjekte verwenden.
URIs
Im Internet ist eine URI (Universal Resource Identifier) eine Zeichenkette, die eine bestimmte Ressource identifiziert. Sie besteht aus einigen oder allen der folgenden Teile: Schema, Hostname, Pfad, Abfrage und Fragment; siehe URI-Syntax.
Ein Ruby URI::Generic-Objekt repräsentiert eine Internet-URI. Es bietet unter anderem die Methoden scheme, hostname, path, query und fragment.
Schemata
Eine Internet-URI hat ein Schema.
Die beiden von Net::HTTP unterstützten Schemata sind 'https' und 'http'
uri.scheme # => "https" URI('http://example.com').scheme # => "http"
Hostnamen
Ein Hostname identifiziert einen Server (Host), an den Anfragen gesendet werden können
hostname = uri.hostname # => "jsonplaceholder.typicode.com" Net::HTTP.start(hostname) do |http| # Some HTTP stuff. end
Pfade
Ein Host-spezifischer Pfad identifiziert eine Ressource auf dem Host
_uri = uri.dup _uri.path = '/todos/1' hostname = _uri.hostname path = _uri.path Net::HTTP.get(hostname, path)
Abfragen
Eine Host-spezifische Abfrage fügt der URI Name/Wert-Paare hinzu
_uri = uri.dup params = {userId: 1, completed: false} _uri.query = URI.encode_www_form(params) _uri # => #<URI::HTTPS https://jsonplaceholder.typicode.com?userId=1&completed=false> Net::HTTP.get(_uri)
Fragmente
Ein URI-Fragment hat in Net::HTTP keine Auswirkung; es werden die gleichen Daten zurückgegeben, unabhängig davon, ob ein Fragment enthalten ist.
Anfrageheader
Anfrageheader können verwendet werden, um zusätzliche Informationen an den Host zu übergeben, ähnlich wie Argumente, die in einem Methodenaufruf übergeben werden; jeder Header ist ein Name/Wert-Paar.
Jede der Net::HTTP-Methoden, die eine Anfrage an den Host sendet, verfügt über ein optionales Argument headers, wobei die Header als Hash von Feldnamen/Wert-Paaren ausgedrückt werden
headers = {Accept: 'application/json', Connection: 'Keep-Alive'} Net::HTTP.get(uri, headers)
Siehe Listen von Standard- und gängigen Anfragefeldern unter Request Fields. Ein Host kann auch andere benutzerdefinierte Felder akzeptieren.
HTTP-Sitzungen
Eine Sitzung ist eine Verbindung zwischen einem Server (Host) und einem Client, die
-
Wird durch die Instanzmethode
Net::HTTP#startbegonnen. -
Kann eine beliebige Anzahl von Anfragen enthalten.
-
Wird durch die Instanzmethode
Net::HTTP#finishbeendet.
Siehe Beispiel-Sitzungen unter Strategien.
Sitzung mit Net::HTTP.start
Wenn Sie viele Anfragen an einen einzelnen Host (und Port) stellen müssen, sollten Sie die Singleton-Methode Net::HTTP.start mit einem Block verwenden. Die Methode kümmert sich automatisch um die Sitzung, indem sie
-
startvor der Ausführung des Blocks aufruft. -
Den Block ausführt.
-
finishnach der Ausführung des Blocks aufruft.
Im Block können Sie diese Instanzmethoden verwenden, von denen jede eine einzelne Anfrage sendet
-
-
get,request_get: GET. -
head,request_head: HEAD. -
post,request_post: POST. -
delete: DELETE. -
options: OPTIONS. -
trace: TRACE. -
patch: PATCH.
-
Sitzung mit Net::HTTP.start und Net::HTTP.finish
Sie können eine Sitzung manuell mit den Methoden start und finish verwalten
http = Net::HTTP.new(hostname) http.start http.get('/todos/1') http.get('/todos/2') http.delete('/posts/1') http.finish # Needed to free resources.
Sitzung mit einer einzigen Anfrage
Bestimmte Komfortmethoden verwalten eine Sitzung automatisch, indem sie
-
Ein HTTP-Objekt erstellen
-
Eine Sitzung starten.
-
Eine einzelne Anfrage senden.
-
Die Sitzung beenden.
-
Das Objekt zerstören.
Solche Methoden, die GET-Anfragen senden
-
::get: Gibt den String-Response-Body zurück. -
::get_print: Schreibt den String-Response-Body nach $stdout. -
::get_response: Gibt einNet::HTTPResponse-Objekt zurück.
Solche Methoden, die POST-Anfragen senden
-
::post: Postet Daten an den Host. -
::post_form: Postet Formulardaten an den Host.
HTTP-Anfragen und -Antworten
Viele der oben genannten Methoden sind Komfortmethoden, von denen jede eine Anfrage sendet und einen String zurückgibt, ohne direkt Net::HTTPRequest- und Net::HTTPResponse-Objekte zu verwenden.
Sie können jedoch direkt ein Anfrageobjekt erstellen, die Anfrage senden und das Antwortobjekt abrufen. Siehe
Weiterleitung verfolgen
Jede zurückgegebene Antwort ist eine Instanz einer Unterklasse von Net::HTTPResponse. Siehe die Antwortklassenhierarchie.
Insbesondere die Klasse Net::HTTPRedirection ist die Elternklasse aller Umleitungsklassen. Dies ermöglicht es Ihnen, eine Fallunterscheidung zu erstellen, um Umleitungen korrekt zu behandeln
def fetch(uri, limit = 10) # You should choose a better exception. raise ArgumentError, 'Too many HTTP redirects' if limit == 0 res = Net::HTTP.get_response(URI(uri)) case res when Net::HTTPSuccess # Any success class. res when Net::HTTPRedirection # Any redirection class. location = res['Location'] warn "Redirected to #{location}" fetch(location, limit - 1) else # Any other class. res.value end end fetch(uri)
Basisauthentifizierung
Die Basisauthentifizierung erfolgt gemäß RFC2617
req = Net::HTTP::Get.new(uri) req.basic_auth('user', 'pass') res = Net::HTTP.start(hostname) do |http| http.request(req) end
Streaming von Antwortkörpern
Standardmäßig liest Net::HTTP eine vollständige Antwort in den Speicher. Wenn Sie große Dateien verarbeiten oder eine Fortschrittsanzeige implementieren möchten, können Sie den Körper stattdessen direkt in eine IO streamen.
Net::HTTP.start(hostname) do |http| req = Net::HTTP::Get.new(uri) http.request(req) do |res| open('t.tmp', 'w') do |f| res.read_body do |chunk| f.write chunk end end end end
HTTPS
HTTPS wird für eine HTTP-Verbindung durch Net::HTTP#use_ssl= aktiviert
Net::HTTP.start(hostname, :use_ssl => true) do |http| req = Net::HTTP::Get.new(uri) res = http.request(req) end
Oder wenn Sie einfach nur eine GET-Anfrage stellen möchten, können Sie ein URI-Objekt übergeben, das eine HTTPS-URL hat. Net::HTTP schaltet die TLS-Verifizierung automatisch ein, wenn das URI-Objekt ein 'https'-URI-Schema hat
uri # => #<URI::HTTPS https://jsonplaceholder.typicode.com/> Net::HTTP.get(uri)
Proxy-Server
Ein HTTP-Objekt kann einen Proxy-Server haben.
Sie können ein HTTP-Objekt mit einem Proxy-Server erstellen, indem Sie die Methode Net::HTTP.new oder die Methode Net::HTTP.start verwenden.
Der Proxy kann entweder über das Argument p_addr oder über die Umgebungsvariable 'http_proxy' definiert werden.
Proxy mit Argument p_addr als String
Wenn das Argument p_addr ein String-Hostname ist, hat das zurückgegebene http den angegebenen Host als Proxy
http = Net::HTTP.new(hostname, nil, 'proxy.example') http.proxy? # => true http.proxy_from_env? # => false http.proxy_address # => "proxy.example" # These use default values. http.proxy_port # => 80 http.proxy_user # => nil http.proxy_pass # => nil
Port, Benutzername und Passwort für den Proxy können ebenfalls angegeben werden
http = Net::HTTP.new(hostname, nil, 'proxy.example', 8000, 'pname', 'ppass') # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false> http.proxy? # => true http.proxy_from_env? # => false http.proxy_address # => "proxy.example" http.proxy_port # => 8000 http.proxy_user # => "pname" http.proxy_pass # => "ppass"
Proxy mit ‘ENV['http_proxy']’
Wenn die Umgebungsvariable 'http_proxy' auf einen URI-String gesetzt ist, hat das zurückgegebene http den Server unter diesem URI als Proxy. Beachten Sie, dass der URI-String ein Protokoll wie 'http' oder 'https' haben muss
ENV['http_proxy'] = 'http://example.com' http = Net::HTTP.new(hostname) http.proxy? # => true http.proxy_from_env? # => true http.proxy_address # => "example.com" # These use default values. http.proxy_port # => 80 http.proxy_user # => nil http.proxy_pass # => nil
Der URI-String kann Proxy-Benutzernamen, -Passwort und -Portnummer enthalten
ENV['http_proxy'] = 'http://pname:ppass@example.com:8000' http = Net::HTTP.new(hostname) http.proxy? # => true http.proxy_from_env? # => true http.proxy_address # => "example.com" http.proxy_port # => 8000 http.proxy_user # => "pname" http.proxy_pass # => "ppass"
Proxys filtern
Mit der Methode Net::HTTP.new (aber nicht mit Net::HTTP.start) können Sie das Argument p_no_proxy verwenden, um Proxys zu filtern
-
Eine bestimmte Adresse ablehnen
http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example') http.proxy_address # => nil
-
Bestimmte Domains oder Subdomains ablehnen
http = Net::HTTP.new('example.com', nil, 'my.proxy.example', 8000, 'pname', 'ppass', 'proxy.example') http.proxy_address # => nil
-
Bestimmte Adressen und Portkombinationen ablehnen
http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:1234') http.proxy_address # => "proxy.example" http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'proxy.example:8000') http.proxy_address # => nil
-
Eine Liste der oben genannten Typen ablehnen, getrennt durch Komma
http = Net::HTTP.new('example.com', nil, 'proxy.example', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000') http.proxy_address # => nil http = Net::HTTP.new('example.com', nil, 'my.proxy', 8000, 'pname', 'ppass', 'my.proxy,proxy.example:8000') http.proxy_address # => nil
Kompression und Dekompression
Net::HTTP komprimiert den Körper einer Anfrage vor dem Senden nicht.
Standardmäßig fügt Net::HTTP den Header 'Accept-Encoding' einem neuen Anfrageobjekt hinzu
Net::HTTP::Get.new(uri)['Accept-Encoding'] # => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
Dies fordert den Server auf, den Antwortkörper zu zippen, falls vorhanden; der Server ist nicht verpflichtet, dies zu tun.
Net::HTTP dekomprimiert einen Antwortkörper nicht automatisch, wenn die Antwort den Header 'Content-Range' hat.
Andernfalls hängt die Dekompression (oder nicht) vom Wert des Headers Content-Encoding ab
-
'deflate','gzip'oder'x-gzip': dekomprimiert den Körper und löscht den Header. -
'none'oder'identity': dekomprimiert den Körper nicht, löscht aber den Header. -
Jeder andere Wert: lässt den Körper und den Header unverändert.
Was gibt es hier
Zuerst, was ist anderswo. Klasse Net::HTTP
-
Erbt von Klasse Object.
Dies ist eine kategorisierte Zusammenfassung von Methoden und Attributen.
Net::HTTP-Objekte
Sitzungen
-
::start: Startet eine neue Sitzung in einem neuen Net::HTTP-Objekt.
-
#started?: Gibt zurück, ob sich in einer Sitzung.
-
#finish: Beendet eine aktive Sitzung.
-
#start: Startet eine neue Sitzung in einem bestehenden Net::HTTP-Objekt (
self).
Verbindungen
-
:continue_timeout: Gibt das Continue-Timeout zurück.
-
#continue_timeout=: Setzt die Continue-Timeout-Sekunden.
-
:keep_alive_timeout: Gibt das Keep-Alive-Timeout zurück.
-
:keep_alive_timeout=: Setzt das Keep-Alive-Timeout.
-
:max_retries: Gibt die maximale Anzahl von Wiederholungsversuchen zurück.
-
#max_retries=: Setzt die maximale Anzahl von Wiederholungsversuchen.
-
:open_timeout: Gibt das Öffnungs-Timeout zurück.
-
:open_timeout=: Setzt das Öffnungs-Timeout.
-
:read_timeout: Gibt das Öffnungs-Timeout zurück.
-
:read_timeout=: Setzt das Lese-Timeout.
-
:ssl_timeout: Gibt das SSL-Timeout zurück.
-
:ssl_timeout=: Setzt das SSL-Timeout.
-
:write_timeout: Gibt das Schreib-Timeout zurück.
-
write_timeout=: Setzt das Schreib-Timeout.
Anfragen
-
::get: Sendet eine GET-Anfrage und gibt den String-Response-Body zurück.
-
::get_print: Sendet eine GET-Anfrage und schreibt den String-Response-Body nach $stdout.
-
::get_response: Sendet eine GET-Anfrage und gibt ein Antwortobjekt zurück.
-
::post_form: Sendet eine POST-Anfrage mit Formulardaten und gibt ein Antwortobjekt zurück.
-
::post: Sendet eine POST-Anfrage mit Daten und gibt ein Antwortobjekt zurück.
-
::put: Sendet eine PUT-Anfrage mit Daten und gibt ein Antwortobjekt zurück.
-
#copy: Sendet eine COPY-Anfrage und gibt ein Antwortobjekt zurück.
-
#delete: Sendet eine DELETE-Anfrage und gibt ein Antwortobjekt zurück.
-
#get: Sendet eine GET-Anfrage und gibt ein Antwortobjekt zurück.
-
#head: Sendet eine HEAD-Anfrage und gibt ein Antwortobjekt zurück.
-
#lock: Sendet eine LOCK-Anfrage und gibt ein Antwortobjekt zurück.
-
#mkcol: Sendet eine MKCOL-Anfrage und gibt ein Antwortobjekt zurück.
-
#move: Sendet eine MOVE-Anfrage und gibt ein Antwortobjekt zurück.
-
#options: Sendet eine OPTIONS-Anfrage und gibt ein Antwortobjekt zurück.
-
#patch: Sendet eine PATCH-Anfrage und gibt ein Antwortobjekt zurück.
-
#post: Sendet eine POST-Anfrage und gibt ein Antwortobjekt zurück.
-
#propfind: Sendet eine PROPFIND-Anfrage und gibt ein Antwortobjekt zurück.
-
#proppatch: Sendet eine PROPPATCH-Anfrage und gibt ein Antwortobjekt zurück.
-
#put: Sendet eine PUT-Anfrage und gibt ein Antwortobjekt zurück.
-
#request: Sendet eine Anfrage und gibt ein Antwortobjekt zurück.
-
#request_get: Sendet eine GET-Anfrage und bildet ein Antwortobjekt. Wenn ein Block angegeben ist, wird der Block mit dem Objekt aufgerufen, andernfalls wird das Objekt zurückgegeben.
-
#request_head: Sendet eine HEAD-Anfrage und bildet ein Antwortobjekt. Wenn ein Block angegeben ist, wird der Block mit dem Objekt aufgerufen, andernfalls wird das Objekt zurückgegeben.
-
#request_post: Sendet eine POST-Anfrage und bildet ein Antwortobjekt. Wenn ein Block angegeben ist, wird der Block mit dem Objekt aufgerufen, andernfalls wird das Objekt zurückgegeben.
-
#send_request: Sendet eine Anfrage und gibt ein Antwortobjekt zurück.
-
#trace: Sendet eine TRACE-Anfrage und gibt ein Antwortobjekt zurück.
-
#unlock: Sendet eine UNLOCK-Anfrage und gibt ein Antwortobjekt zurück.
Antworten
-
:close_on_empty_response: Gibt zurück, ob die Verbindung bei einer leeren Antwort geschlossen werden soll.
-
:close_on_empty_response=: Legt fest, ob die Verbindung bei einer leeren Antwort geschlossen werden soll.
-
:ignore_eof: Gibt zurück, ob End-of-File beim Lesen eines Antwortkörpers mit
Content-Length-Headern ignoriert werden soll. -
:ignore_eof=: Legt fest, ob End-of-File beim Lesen eines Antwortkörpers mit
Content-Length-Headern ignoriert werden soll. -
:response_body_encoding: Gibt die zu verwendende Kodierung für den Antwortkörper zurück.
-
#response_body_encoding=: Legt die Kodierung des Antwortkörpers fest.
Proxys
-
:proxy_address: Gibt die Proxy-Adresse zurück.
-
:proxy_address=: Legt die Proxy-Adresse fest.
-
::proxy_class?: Gibt zurück, ob
selfeine Proxy-Klasse ist. -
#proxy?: Gibt zurück, ob
selfeinen Proxy hat. -
#proxy_address: Gibt die Proxy-Adresse zurück.
-
#proxy_from_env?: Gibt zurück, ob der Proxy aus einer Umgebungsvariablen stammt.
-
:proxy_from_env=: Legt fest, ob der Proxy aus einer Umgebungsvariablen übernommen werden soll.
-
:proxy_pass: Gibt das Passwort für den Proxy-Zugriff zurück.
-
:proxy_pass=: Legt das Passwort für den Proxy-Zugriff fest.
-
:proxy_port: Gibt die Portnummer des Proxy-Hosts zurück.
-
:proxy_port=: Legt die Portnummer des Proxy-Hosts fest.
-
#proxy_user: Gibt den Benutzernamen für den Proxy-Zugriff zurück.
-
:proxy_user=: Legt den Proxy-Benutzer fest.
Security
-
:ca_file: Gibt den Pfad zu einer CA-Zertifikatsdatei zurück.
-
:ca_file=: Legt den Pfad zu einer CA-Zertifikatsdatei fest.
-
:ca_path: Gibt den Pfad zu einem CA-Verzeichnis mit Zertifikatsdateien zurück.
-
:ca_path=: Legt den Pfad zu einem CA-Verzeichnis mit Zertifikatsdateien fest.
-
:cert: Gibt das
OpenSSL::X509::Certificate-Objekt zurück, das für die Client-Zertifizierung verwendet werden soll. -
:cert=: Legt das
OpenSSL::X509::Certificate-Objekt fest, das für die Client-Zertifizierung verwendet werden soll. -
:cert_store: Gibt das X509::Store-Objekt zurück, das für die Verifizierung des Peer-Zertifikats verwendet werden soll.
-
:cert_store=: Legt das X509::Store-Objekt fest, das für die Verifizierung des Peer-Zertifikats verwendet werden soll.
-
:ciphers: Gibt die verfügbaren SSL-Cipher zurück.
-
:ciphers=: Legt die verfügbaren SSL-Cipher fest.
-
:extra_chain_cert: Gibt die zusätzlichen X509-Zertifikate zurück, die der Zertifikatskette hinzugefügt werden sollen.
-
:extra_chain_cert=: Legt die zusätzlichen X509-Zertifikate fest, die der Zertifikatskette hinzugefügt werden sollen.
-
:key: Gibt das
OpenSSL::PKey::RSA- oderOpenSSL::PKey::DSA-Objekt zurück. -
:key=: Legt das
OpenSSL::PKey::RSA- oderOpenSSL::PKey::DSA-Objekt fest. -
:max_version: Gibt die maximale SSL-Version zurück.
-
:max_version=: Legt die maximale SSL-Version fest.
-
:min_version: Gibt die minimale SSL-Version zurück.
-
:min_version=: Legt die minimale SSL-Version fest.
-
#peer_cert: Gibt die X509-Zertifikatkette des Socket-Peers der Sitzung zurück.
-
:ssl_version: Gibt die SSL-Version zurück.
-
:ssl_version=: Legt die SSL-Version fest.
-
#use_ssl=: Legt fest, ob eine neue Sitzung Transport Layer Security (TLS) verwenden soll.
-
#use_ssl?: Gibt zurück, ob
selfSSL verwendet. -
:verify_callback: Gibt den Callback für die Verifizierung der Serverzertifizierung zurück.
-
:verify_callback=: Legt den Callback für die Verifizierung der Serverzertifizierung fest.
-
:verify_depth: Gibt die maximale Tiefe für die Verifizierung der Zertifikatskette zurück.
-
:verify_depth=: Legt die maximale Tiefe für die Verifizierung der Zertifikatskette fest.
-
:verify_hostname: Gibt die Flags für die Verifizierung der Serverzertifizierung zu Beginn der SSL/TLS-Sitzung zurück.
-
:verify_hostname=: Legt die Flags für die Verifizierung der Serverzertifizierung zu Beginn der SSL/TLS-Sitzung fest.
-
:verify_mode: Gibt die Flags für die Verifizierung der Serverzertifizierung zu Beginn der SSL/TLS-Sitzung zurück.
-
:verify_mode=: Legt die Flags für die Verifizierung der Serverzertifizierung zu Beginn der SSL/TLS-Sitzung fest.
Adressen und Ports
-
:address: Gibt den String-Hostnamen oder die Host-IP zurück.
-
::default_port: Gibt die Ganzzahl 80 zurück, den Standardport für
HTTP-Anfragen. -
::http_default_port: Gibt die Ganzzahl 80 zurück, den Standardport für
HTTP-Anfragen. -
::https_default_port: Gibt die Ganzzahl 443 zurück, den Standardport für HTTPS-Anfragen.
-
#ipaddr: Gibt die IP-Adresse für die Verbindung zurück.
-
#ipaddr=: Legt die IP-Adresse für die Verbindung fest.
-
:local_host: Gibt den String-Hostnamen des lokalen Hosts zurück, der zur Herstellung der Verbindung verwendet wird.
-
:local_host=: Legt den String-Hostnamen des lokalen Hosts fest, der zur Herstellung der Verbindung verwendet wird.
-
:local_port: Gibt die Ganzzahl des lokalen Ports zurück, der zur Herstellung der Verbindung verwendet wird.
-
:local_port=: Legt die Ganzzahl des lokalen Ports fest, der zur Herstellung der Verbindung verwendet wird.
-
:port: Gibt die Ganzzahl der Portnummer zurück.
HTTP-Version
-
::version_1_2? (aliasiert als ::version_1_2): Gibt
truezurück; aus Kompatibilitätsgründen beibehalten.
Debugging
-
#set_debug_output: Legt den Ausgabestream für das Debugging fest.
Attribute
Ermöglicht die Einstellung der Standardkonfiguration, die beim Erstellen einer neuen Verbindung verwendet wird.
Beispiel
Net::HTTP.default_configuration = { read_timeout: 1, write_timeout: 1 } http = Net::HTTP.new(hostname) http.open_timeout # => 60 http.read_timeout # => 1 http.write_timeout # => 1
Gibt die Adresse des Proxy-Hosts zurück oder nil, wenn keine vorhanden ist. Siehe Proxy-Server in Net::HTTP.
Gibt das Passwort für den Proxy-Zugriff zurück oder nil, wenn keines vorhanden ist. Siehe Proxy-Server in Net::HTTP.
Gibt die Portnummer des Proxy-Hosts zurück oder nil, wenn keine vorhanden ist. Siehe Proxy-Server in Net::HTTP.
Verwendet SSL für die Kommunikation mit dem Proxy. Wenn Net::HTTP keinen Proxy verwendet, nil.
Gibt den Benutzernamen für den Proxy-Zugriff zurück oder nil, wenn keiner vorhanden ist. Siehe Proxy-Server in Net::HTTP.
Gibt den String-Hostnamen oder die Host-IP zurück, die als Argument address in ::new angegeben wurde.
Legt den Pfad zu einer CA-Zertifikatsdatei im PEM-Format fest oder gibt ihn zurück.
Legt den Pfad zu einem CA-Verzeichnis mit Zertifikatsdateien im PEM-Format fest oder gibt ihn zurück.
Legt das OpenSSL::X509::Certificate-Objekt fest, das für die Client-Zertifizierung verwendet werden soll, oder gibt es zurück.
Legt das X509::Store-Objekt fest, das für die Verifizierung des Peer-Zertifikats verwendet werden soll, oder gibt es zurück.
Legt die verfügbaren SSL-Cipher fest oder gibt sie zurück. Siehe :SSL::SSLContext#ciphers=.
Legt fest, ob die Verbindung geschlossen werden soll, wenn die Antwort leer ist, oder gibt dies zurück. Standardmäßig false.
Gibt den Wert des Continue-Timeouts zurück. Siehe continue_timeout=.
Legt die zusätzlichen X509-Zertifikate fest, die der Zertifikatskette hinzugefügt werden sollen, oder gibt sie zurück. Siehe :SSL::SSLContext#add_certificate.
Legt fest, ob End-of-File beim Lesen eines Antwortkörpers mit Content-Length-Headern ignoriert werden soll, oder gibt dies zurück. Standardmäßig true.
Legt die numerische (Integer oder Float) Anzahl von Sekunden fest, die auf die Öffnung einer Verbindung gewartet wird, oder gibt sie zurück. Standardmäßig 2. Wenn während des angegebenen Intervalls eine neue Anfrage gestellt wird, wird die noch offene Verbindung verwendet; andernfalls wird die Verbindung geschlossen und eine neue Verbindung geöffnet.
Legt das OpenSSL::PKey::RSA- oder OpenSSL::PKey::DSA-Objekt fest oder gibt es zurück.
Legt den String-Hostnamen des lokalen Hosts fest, der zur Herstellung der Verbindung verwendet wird, oder gibt ihn zurück. Standardmäßig nil.
Legt die Ganzzahl des lokalen Ports fest, der zur Herstellung der Verbindung verwendet wird, oder gibt sie zurück. Standardmäßig nil.
Gibt die maximale Anzahl von Wiederholungsversuchen für eine idempotente Anfrage zurück. Siehe max_retries=.
Legt die maximale SSL-Version fest oder gibt sie zurück. Siehe :SSL::SSLContext#max_version=.
Legt die minimale SSL-Version fest oder gibt sie zurück. Siehe :SSL::SSLContext#min_version=.
Legt die numerische (Integer oder Float) Anzahl von Sekunden fest, die auf die Öffnung einer Verbindung gewartet wird, oder gibt sie zurück. Standardmäßig 60. Wenn die Verbindung nicht innerhalb des angegebenen Zeitraums hergestellt wird, wird eine Ausnahme ausgelöst.
Legt die Proxy-Adresse fest. Siehe Proxy-Server.
Legt das Proxy-Passwort fest. Siehe Proxy-Server.
Legt den Proxy-Port fest. Siehe Proxy-Server.
Legt fest, ob der Proxy SSL verwendet. Siehe Proxy-Server.
Legt den Proxy-Benutzer fest. Siehe Proxy-Server.
Gibt die numerische (Integer oder Float) Anzahl von Sekunden zurück, die auf das Lesen eines Blockes gewartet wird (über einen einzelnen read(2)-Aufruf). Siehe read_timeout=.
Gibt die zu verwendende Kodierung für den Antwortkörper zurück. Siehe response_body_encoding=.
Legt die SSL-Timeout-Sekunden fest oder gibt sie zurück.
Legt die SSL-Version fest oder gibt sie zurück. Siehe :SSL::SSLContext#ssl_version=.
Legt den Callback für die Verifizierung der Serverzertifizierung fest oder gibt ihn zurück.
Legt die maximale Tiefe für die Verifizierung der Zertifikatskette fest oder gibt sie zurück.
Legt fest, ob verifiziert werden soll, dass das Serverzertifikat für den Hostnamen gültig ist, oder gibt dies zurück. Siehe :SSL::SSLContext#verify_hostname=.
Legt die Flags für die Verifizierung der Serverzertifizierung zu Beginn der SSL/TLS-Sitzung fest oder gibt sie zurück. Akzeptabel sind OpenSSL::SSL::VERIFY_NONE oder OpenSSL::SSL::VERIFY_PEER.
Gibt die numerische (Integer oder Float) Anzahl von Sekunden zurück, die auf das Schreiben eines Blockes gewartet wird (über einen einzelnen write(2)-Aufruf). Siehe write_timeout=.
Öffentliche Klassenmethoden
Source
# File lib/net/http.rb, line 935 def HTTP.default_port http_default_port() end
Gibt die Ganzzahl 80 zurück, den Standardport für HTTP-Anfragen
Net::HTTP.default_port # => 80
Source
# File lib/net/http.rb, line 804 def HTTP.get(uri_or_host, path_or_headers = nil, port = nil) get_response(uri_or_host, path_or_headers, port).body end
Sendet eine GET-Anfrage und gibt den HTTP-Antwortkörper als String zurück.
Mit String-Argumenten hostname und path
hostname = 'jsonplaceholder.typicode.com' path = '/todos/1' puts Net::HTTP.get(hostname, path)
Ausgabe
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
Mit dem URI-Objekt uri und dem optionalen Hash-Argument headers
uri = URI('https://jsonplaceholder.typicode.com/todos/1') headers = {'Content-type' => 'application/json; charset=UTF-8'} Net::HTTP.get(uri, headers)
Verwandt
-
Net::HTTP::Get: Anfrageklasse für die HTTP-MethodeGET. -
Net::HTTP#get: Komfortmethode für die HTTP-MethodeGET.
Source
# File lib/net/http.rb, line 763 def HTTP.get_print(uri_or_host, path_or_headers = nil, port = nil) get_response(uri_or_host, path_or_headers, port) {|res| res.read_body do |chunk| $stdout.print chunk end } nil end
Wie Net::HTTP.get, aber schreibt den zurückgegebenen Körper nach $stdout; gibt nil zurück.
Source
# File lib/net/http.rb, line 814 def HTTP.get_response(uri_or_host, path_or_headers = nil, port = nil, &block) if path_or_headers && !path_or_headers.is_a?(Hash) host = uri_or_host path = path_or_headers new(host, port || HTTP.default_port).start {|http| return http.request_get(path, &block) } else uri = uri_or_host headers = path_or_headers start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http| return http.request_get(uri, headers, &block) } end end
Wie Net::HTTP.get, gibt aber ein Net::HTTPResponse-Objekt anstelle des Body-Strings zurück.
Source
# File lib/net/http.rb, line 943 def HTTP.http_default_port 80 end
Gibt die Ganzzahl 80 zurück, den Standardport für HTTP-Anfragen
Net::HTTP.http_default_port # => 80
Source
# File lib/net/http.rb, line 951 def HTTP.https_default_port 443 end
Gibt die Ganzzahl 443 zurück, den Standardport für HTTPS-Anfragen
Net::HTTP.https_default_port # => 443
Source
# File lib/net/http.rb, line 1100 def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil) http = super address, port if proxy_class? then # from Net::HTTP::Proxy() http.proxy_from_env = @proxy_from_env http.proxy_address = @proxy_address http.proxy_port = @proxy_port http.proxy_user = @proxy_user http.proxy_pass = @proxy_pass http.proxy_use_ssl = @proxy_use_ssl elsif p_addr == :ENV then http.proxy_from_env = true else if p_addr && p_no_proxy && !URI::Generic.use_proxy?(address, address, port, p_no_proxy) p_addr = nil p_port = nil end http.proxy_address = p_addr http.proxy_port = p_port || default_port http.proxy_user = p_user http.proxy_pass = p_pass http.proxy_use_ssl = p_use_ssl end http end
Gibt ein neues Net::HTTP-Objekt http zurück (öffnet jedoch keine TCP-Verbindung oder HTTP-Sitzung).
Wenn nur das String-Argument adresse angegeben ist (und ENV['http_proxy'] undefiniert oder nil ist), das zurückgegebene http
-
Hat die angegebene Adresse.
-
Hat die Standardportnummer
Net::HTTP.default_port(80). -
Hat keinen Proxy.
Beispiel
http = Net::HTTP.new(hostname) # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false> http.address # => "jsonplaceholder.typicode.com" http.port # => 80 http.proxy? # => false
Mit zusätzlich angegebenem Integer-Argument port hat das zurückgegebene http den angegebenen Port
http = Net::HTTP.new(hostname, 8000) # => #<Net::HTTP jsonplaceholder.typicode.com:8000 open=false> http.port # => 8000
Für proxydefinierende Argumente p_adresse bis p_no_proxy siehe Proxy Server.
Source
# File lib/net/http.rb, line 857 def HTTP.post(url, data, header = nil) start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.post(url, data, header) } end
Sendet Daten an einen Host; gibt ein Net::HTTPResponse-Objekt zurück.
Das Argument url muss eine URL sein; das Argument daten muss ein String sein
_uri = uri.dup _uri.path = '/posts' data = '{"title": "foo", "body": "bar", "userId": 1}' headers = {'content-type': 'application/json'} res = Net::HTTP.post(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true> puts res.body
Ausgabe
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
Verwandt
-
Net::HTTP::Post: Request-Klasse für die HTTP-MethodePOST. -
Net::HTTP#post: Komfortmethode für die HTTP-MethodePOST.
Source
# File lib/net/http.rb, line 884 def HTTP.post_form(url, params) req = Post.new(url) req.form_data = params req.basic_auth url.user, url.password if url.user start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.request(req) } end
Sendet Daten an einen Host; gibt ein Net::HTTPResponse-Objekt zurück.
Das Argument url muss ein URI sein; das Argument daten muss ein Hash sein
_uri = uri.dup _uri.path = '/posts' data = {title: 'foo', body: 'bar', userId: 1} res = Net::HTTP.post_form(_uri, data) # => #<Net::HTTPCreated 201 Created readbody=true> puts res.body
Ausgabe
{
"title": "foo",
"body": "bar",
"userId": "1",
"id": 101
}
Source
# File lib/net/http.rb, line 1855 def proxy_class? defined?(@is_proxy_class) ? @is_proxy_class : false end
Gibt true zurück, wenn self eine Klasse ist, die von HTTP::Proxy erstellt wurde.
Source
# File lib/net/http.rb, line 920 def HTTP.put(url, data, header = nil) start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.put(url, data, header) } end
Sendet eine PUT-Anfrage an den Server; gibt ein Net::HTTPResponse-Objekt zurück.
Das Argument url muss eine URL sein; das Argument daten muss ein String sein
_uri = uri.dup _uri.path = '/posts' data = '{"title": "foo", "body": "bar", "userId": 1}' headers = {'content-type': 'application/json'} res = Net::HTTP.put(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true> puts res.body
Ausgabe
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
Verwandt
-
Net::HTTP::Put: Request-Klasse für die HTTP-MethodePUT. -
Net::HTTP#put: Komfortmethode für die HTTP-MethodePUT.
Source
# File lib/net/http.rb, line 1045 def HTTP.start(address, *arg, &block) # :yield: +http+ arg.pop if opt = Hash.try_convert(arg[-1]) port, p_addr, p_port, p_user, p_pass = *arg p_addr = :ENV if arg.size < 2 port = https_default_port if !port && opt && opt[:use_ssl] http = new(address, port, p_addr, p_port, p_user, p_pass) http.ipaddr = opt[:ipaddr] if opt && opt[:ipaddr] if opt if opt[:use_ssl] opt = {verify_mode: OpenSSL::SSL::VERIFY_PEER}.update(opt) end http.methods.grep(/\A(\w+)=\z/) do |meth| key = $1.to_sym opt.key?(key) or next http.__send__(meth, opt[key]) end end http.start(&block) end
Erstellt ein neues Net::HTTP-Objekt, http, über Net::HTTP.new
-
Für die Argumente
adresseundportsieheNet::HTTP.new. -
Für proxydefinierende Argumente
p_adressebisp_passsiehe Proxy Server. -
Für das Argument
optionensiehe unten.
Ohne Block
-
Ruft
http.startohne Block auf (siehestart), was eine TCP-Verbindung und eine HTTP-Sitzung öffnet. -
Gibt
httpzurück. -
Der Aufrufer sollte
finishaufrufen, um die Sitzung zu schließenhttp = Net::HTTP.start(hostname) http.started? # => true http.finish http.started? # => false
Mit Block
-
Ruft
http.startmit dem Block auf (siehestart), was-
Öffnet eine TCP-Verbindung und HTTP-Sitzung.
-
Ruft den Block auf, der beliebige Anfragen an den Host stellen kann.
-
Schließt die HTTP-Sitzung und die TCP-Verbindung beim Beenden des Blocks.
-
Gibt den Wert des Blocks
objektzurück.
-
-
Gibt
objektzurück.
Beispiel
hostname = 'jsonplaceholder.typicode.com' Net::HTTP.start(hostname) do |http| puts http.get('/todos/1').body puts http.get('/todos/2').body end
Ausgabe
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
{
"userId": 1,
"id": 2,
"title": "quis ut nam facilis et officia qui",
"completed": false
}
Wenn das letzte angegebene Argument ein Hash ist, ist dies der optionen-Hash, wobei jeder Schlüssel eine aufzurufende Methode oder ein Accessor ist und sein Wert der einzustellende Wert ist.
Die Schlüssel können enthalten
Hinweis: Wenn port nil ist und optionen[:use_ssl] einen wahrheitsgemäßen Wert hat, ist der an new übergebene Wert Net::HTTP.https_default_port, nicht port.
Source
# File lib/net/http.rb, line 738 def HTTP.version_1_2 true end
Gibt true zurück; zur Kompatibilität beibehalten.
Source
# File lib/net/http.rb, line 743 def HTTP.version_1_2? true end
Gibt true zurück; zur Kompatibilität beibehalten.
Öffentliche Instanzmethoden
Source
# File lib/net/http.rb, line 1455 def continue_timeout=(sec) @socket.continue_timeout = sec if @socket @continue_timeout = sec end
Legt den Continue-Timeout-Wert fest, d.h. die Anzahl der Sekunden, die auf eine erwartete 100 Continue-Antwort gewartet wird. Wenn das HTTP-Objekt innerhalb dieser Sekunden keine Antwort erhält, sendet es den Anforderungskörper.
Source
# File lib/net/http.rb, line 2227 def copy(path, initheader = nil) request(Copy.new(path, initheader)) end
Sendet eine COPY-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Copy, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.copy('/todos/1')
Source
# File lib/net/http.rb, line 2201 def delete(path, initheader = {'Depth' => 'Infinity'}) request(Delete.new(path, initheader)) end
Sendet eine DELETE-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Delete, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.delete('/todos/1')
Source
# File lib/net/http.rb, line 1648 def finish raise IOError, 'HTTP session not yet started' unless started? do_finish end
Beendet die HTTP-Sitzung
http = Net::HTTP.new(hostname) http.start http.started? # => true http.finish # => nil http.started? # => false
Löst eine IOError aus, wenn nicht in einer Sitzung.
Source
# File lib/net/http.rb, line 2013 def get(path, initheader = nil, dest = nil, &block) # :yield: +body_segment+ res = nil request(Get.new(path, initheader)) {|r| r.read_body dest, &block res = r } res end
Sendet eine GET-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Get, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
Mit Block wird der Block mit dem Antwortkörper aufgerufen
http = Net::HTTP.new(hostname) http.get('/todos/1') do |res| p res end # => #<Net::HTTPOK 200 OK readbody=true>
Ausgabe
"{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false\n}"
Ohne Block wird einfach das Antwortobjekt zurückgegeben
http.get('/') # => #<Net::HTTPOK 200 OK readbody=true>
Verwandt
-
Net::HTTP::Get: Request-Klasse für die HTTP-Methode GET. -
Net::HTTP.get: sendet GET-Anfrage, gibt Antwortkörper zurück.
Source
# File lib/net/http.rb, line 2037 def head(path, initheader = nil) request(Head.new(path, initheader)) end
Sendet eine HEAD-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Head, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde
res = http.head('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true> res.body # => nil res.to_hash.take(3) # => [["date", ["Wed, 15 Feb 2023 15:25:42 GMT"]], ["content-type", ["application/json; charset=utf-8"]], ["connection", ["close"]]]
Source
# File lib/net/http.rb, line 1206 def inspect "#<#{self.class} #{@address}:#{@port} open=#{started?}>" end
Gibt eine String-Repräsentation von self zurück.
Net::HTTP.new(hostname).inspect # => "#<Net::HTTP jsonplaceholder.typicode.com:80 open=false>"
Source
# File lib/net/http.rb, line 1349 def ipaddr started? ? @socket.io.peeraddr[3] : @ipaddr end
Gibt die IP-Adresse für die Verbindung zurück.
Wenn die Sitzung noch nicht gestartet wurde, wird der durch ipaddr= gesetzte Wert zurückgegeben oder nil, wenn er nicht gesetzt wurde.
http = Net::HTTP.new(hostname) http.ipaddr # => nil http.ipaddr = '172.67.155.76' http.ipaddr # => "172.67.155.76"
Wenn die Sitzung gestartet wurde, wird die IP-Adresse von der Socket-Verbindung zurückgegeben.
http = Net::HTTP.new(hostname) http.start http.ipaddr # => "172.67.155.76" http.finish
Source
# File lib/net/http.rb, line 1361 def ipaddr=(addr) raise IOError, "ipaddr value changed, but session already started" if started? @ipaddr = addr end
Legt die IP-Adresse für die Verbindung fest
http = Net::HTTP.new(hostname) http.ipaddr # => nil http.ipaddr = '172.67.155.76' http.ipaddr # => "172.67.155.76"
Die IP-Adresse kann nicht gesetzt werden, wenn die Sitzung bereits gestartet wurde.
Source
# File lib/net/http.rb, line 2147 def lock(path, body, initheader = nil) request(Lock.new(path, initheader), body) end
Sendet eine LOCK-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Lock, das aus dem String pfad, dem String körper und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.lock('/todos/1', data)
Source
# File lib/net/http.rb, line 1395 def max_retries=(retries) retries = retries.to_int if retries < 0 raise ArgumentError, 'max_retries should be non-negative integer number' end @max_retries = retries end
Legt die maximale Anzahl von Wiederholungsversuchen für eine idempotente Anfrage im Falle von Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError, Timeout::Error fest. Der Anfangswert ist 1.
Das Argument wiederholungen muss ein nicht-negativer numerischer Wert sein
http = Net::HTTP.new(hostname) http.max_retries = 2 # => 2 http.max_retries # => 2
Source
# File lib/net/http.rb, line 2241 def mkcol(path, body = nil, initheader = nil) request(Mkcol.new(path, initheader), body) end
Sendet eine MKCOL-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Mkcol, das aus dem String pfad, dem String körper und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http.mkcol('/todos/1', data) http = Net::HTTP.new(hostname)
Source
# File lib/net/http.rb, line 2214 def move(path, initheader = nil) request(Move.new(path, initheader)) end
Sendet eine MOVE-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Move, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.move('/todos/1')
Source
# File lib/net/http.rb, line 2174 def options(path, initheader = nil) request(Options.new(path, initheader)) end
Sendet eine Options-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Options, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.options('/')
Source
# File lib/net/http.rb, line 2100 def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ send_entity(path, data, initheader, dest, Patch, &block) end
Sendet eine PATCH-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Patch, das aus dem String pfad, dem String daten und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
Mit Block wird der Block mit dem Antwortkörper aufgerufen
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.patch('/todos/1', data) do |res| p res end # => #<Net::HTTPOK 200 OK readbody=true>
Ausgabe
"{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false,\n \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\"\n}"
Ohne Block wird einfach das Antwortobjekt zurückgegeben
http.patch('/todos/1', data) # => #<Net::HTTPCreated 201 Created readbody=true>
Source
# File lib/net/http.rb, line 1597 def peer_cert if not use_ssl? or not @socket return nil end @socket.io.peer_cert end
Gibt die X509-Zertifikatskette (ein Array von Strings) des Peers der Sitzungs-Socket-Verbindung zurück oder nil, wenn keine vorhanden ist.
Source
# File lib/net/http.rb, line 2071 def post(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ send_entity(path, data, initheader, dest, Post, &block) end
Sendet eine POST-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Post, das aus dem String pfad, dem String daten und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
Mit Block wird der Block mit dem Antwortkörper aufgerufen
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.post('/todos', data) do |res| p res end # => #<Net::HTTPCreated 201 Created readbody=true>
Ausgabe
"{\n \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\",\n \"id\": 201\n}"
Ohne Block wird einfach das Antwortobjekt zurückgegeben
http.post('/todos', data) # => #<Net::HTTPCreated 201 Created readbody=true>
Verwandt
-
Net::HTTP::Post: Request-Klasse für die HTTP-Methode POST. -
Net::HTTP.post: sendet POST-Anfrage, gibt Antwortkörper zurück.
Source
# File lib/net/http.rb, line 2188 def propfind(path, body = nil, initheader = {'Depth' => '0'}) request(Propfind.new(path, initheader), body) end
Sendet eine PROPFIND-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Propfind, das aus dem String pfad, dem String körper und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.propfind('/todos/1', data)
Source
# File lib/net/http.rb, line 2133 def proppatch(path, body, initheader = nil) request(Proppatch.new(path, initheader), body) end
Sendet eine PROPPATCH-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Proppatch, das aus dem String pfad, dem String körper und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.proppatch('/todos/1', data)
Source
# File lib/net/http.rb, line 1881 def proxy? !!(@proxy_from_env ? proxy_uri : @proxy_address) end
Gibt true zurück, wenn ein Proxy-Server definiert ist, andernfalls false; siehe Proxy Server.
Source
# File lib/net/http.rb, line 1903 def proxy_address if @proxy_from_env then proxy_uri&.hostname else @proxy_address end end
Gibt die Adresse des Proxy-Servers zurück, falls definiert, andernfalls nil; siehe Proxy Server.
Source
# File lib/net/http.rb, line 1888 def proxy_from_env? @proxy_from_env end
Gibt true zurück, wenn der Proxy-Server in der Umgebung definiert ist, andernfalls false; siehe Proxy Server.
Source
# File lib/net/http.rb, line 1934 def proxy_pass if @proxy_from_env pass = proxy_uri&.password unescape(pass) if pass else @proxy_pass end end
Gibt das Passwort des Proxy-Servers zurück, falls definiert, andernfalls nil; siehe Proxy Server.
Source
# File lib/net/http.rb, line 1913 def proxy_port if @proxy_from_env then proxy_uri&.port else @proxy_port end end
Gibt die Portnummer des Proxy-Servers zurück, falls definiert, andernfalls nil; siehe Proxy Server.
Source
# File lib/net/http.rb, line 1923 def proxy_user if @proxy_from_env user = proxy_uri&.user unescape(user) if user else @proxy_user end end
Gibt den Benutzernamen des Proxy-Servers zurück, falls definiert, andernfalls nil; siehe Proxy Server.
Source
# File lib/net/http.rb, line 2119 def put(path, data, initheader = nil) request(Put.new(path, initheader), data) end
Sendet eine PUT-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Put, das aus dem String pfad, dem String daten und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.put('/todos/1', data) # => #<Net::HTTPOK 200 OK readbody=true>
Verwandt
-
Net::HTTP::Put: Request-Klasse für die HTTP-Methode PUT. -
Net::HTTP.put: sendet PUT-Anfrage, gibt Antwortkörper zurück.
Source
# File lib/net/http.rb, line 1418 def read_timeout=(sec) @socket.read_timeout = sec if @socket @read_timeout = sec end
Legt das Lesezeitlimit in Sekunden für self auf den Integer sek fest; der Anfangswert ist 60.
Das Argument sek muss ein nicht-negativer numerischer Wert sein
http = Net::HTTP.new(hostname) http.read_timeout # => 60 http.get('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true> http.read_timeout = 0 http.get('/todos/1') # Raises Net::ReadTimeout.
Source
# File lib/net/http.rb, line 2399 def request(req, body = nil, &block) # :yield: +response+ unless started? start { req['connection'] ||= 'close' return request(req, body, &block) } end if proxy_user() req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl? end req.set_body_internal body res = transport_request(req, &block) if sspi_auth?(res) sspi_auth(req) res = transport_request(req, &block) end res end
Sendet die angegebene Anfrage req an den Server; formt die Antwort zu einem Net::HTTPResponse-Objekt.
Das angegebene req muss eine Instanz einer Unterklasse von Net::HTTPRequest sein. Das Argument körper sollte nur angegeben werden, wenn es für die Anfrage benötigt wird.
Ohne Block wird das Antwortobjekt zurückgegeben
http = Net::HTTP.new(hostname) req = Net::HTTP::Get.new('/todos/1') http.request(req) # => #<Net::HTTPOK 200 OK readbody=true> req = Net::HTTP::Post.new('/todos') http.request(req, 'xyzzy') # => #<Net::HTTPCreated 201 Created readbody=true>
Mit Block wird der Block mit der Antwort aufgerufen und die Antwort zurückgegeben
req = Net::HTTP::Get.new('/todos/1') http.request(req) do |res| p res end # => #<Net::HTTPOK 200 OK readbody=true>
Ausgabe
#<Net::HTTPOK 200 OK readbody=false>
Source
# File lib/net/http.rb, line 2280 def request_get(path, initheader = nil, &block) # :yield: +response+ request(Get.new(path, initheader), &block) end
Sendet eine GET-Anfrage an den Server; formt die Antwort zu einem Net::HTTPResponse-Objekt.
Die Anfrage basiert auf dem Objekt Net::HTTP::Get, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
Ohne Block wird das Antwortobjekt zurückgegeben
http = Net::HTTP.new(hostname) http.request_get('/todos') # => #<Net::HTTPOK 200 OK readbody=true>
Mit Block wird der Block mit dem Antwortobjekt aufgerufen und das Antwortobjekt zurückgegeben
http.request_get('/todos') do |res| p res end # => #<Net::HTTPOK 200 OK readbody=true>
Ausgabe
#<Net::HTTPOK 200 OK readbody=false>
Source
# File lib/net/http.rb, line 2293 def request_head(path, initheader = nil, &block) request(Head.new(path, initheader), &block) end
Sendet eine HEAD-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Head, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.head('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
Source
# File lib/net/http.rb, line 2320 def request_post(path, data, initheader = nil, &block) # :yield: +response+ request Post.new(path, initheader), data, &block end
Sendet eine POST-Anfrage an den Server; formt die Antwort zu einem Net::HTTPResponse-Objekt.
Die Anfrage basiert auf dem Objekt Net::HTTP::Post, das aus dem String pfad, dem String daten und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
Ohne Block wird das Antwortobjekt zurückgegeben
http = Net::HTTP.new(hostname) http.post('/todos', 'xyzzy') # => #<Net::HTTPCreated 201 Created readbody=true>
Mit Block wird der Block mit dem Antwortkörper aufgerufen und das Antwortobjekt zurückgegeben
http.post('/todos', 'xyzzy') do |res| p res end # => #<Net::HTTPCreated 201 Created readbody=true>
Ausgabe
"{\n \"xyzzy\": \"\",\n \"id\": 201\n}"
Source
# File lib/net/http.rb, line 1300 def response_body_encoding=(value) value = Encoding.find(value) if value.is_a?(String) @response_body_encoding = value end
Legt die für den Antwortkörper zu verwendende Kodierung fest; gibt die Kodierung zurück.
Der angegebene wert kann sein
-
Ein
Encoding-Objekt. -
Der Name einer Kodierung.
-
Ein Alias für einen Kodierungsnamen.
Siehe Encoding.
Beispiele
http = Net::HTTP.new(hostname) http.response_body_encoding = Encoding::US_ASCII # => #<Encoding:US-ASCII> http.response_body_encoding = 'US-ASCII' # => "US-ASCII" http.response_body_encoding = 'ASCII' # => "ASCII"
Source
# File lib/net/http.rb, line 2363 def send_request(name, path, data = nil, header = nil) has_response_body = name != 'HEAD' r = HTTPGenericRequest.new(name,(data ? true : false),has_response_body,path,header) request r, data end
Sendet eine HTTP-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTPRequest, das aus dem String pfad, dem String daten und dem Hash header mit Anfangskopfzeilen erstellt wurde. Dieses Objekt ist eine Instanz der Unterklasse von Net::HTTPRequest, die der angegebenen Großbuchstaben-Zeichenkette name entspricht, welche eine HTTP-Anfragemethode oder eine WebDAV-Anfragemethode sein muss.
Beispiele
http = Net::HTTP.new(hostname) http.send_request('GET', '/todos/1') # => #<Net::HTTPOK 200 OK readbody=true> http.send_request('POST', '/todos', 'xyzzy') # => #<Net::HTTPCreated 201 Created readbody=true>
Source
# File lib/net/http.rb, line 1259 def set_debug_output(output) warn 'Net::HTTP#set_debug_output called after HTTP started', uplevel: 1 if started? @debug_output = output end
WARNUNG Diese Methode öffnet ein ernsthaftes Sicherheitsloch. Verwenden Sie diese Methode niemals in Produktionscode.
Legt den Ausgabe-Stream für das Debugging fest
http = Net::HTTP.new(hostname) File.open('t.tmp', 'w') do |file| http.set_debug_output(file) http.start http.get('/nosuch/1') http.finish end puts File.read('t.tmp')
Ausgabe
opening connection to jsonplaceholder.typicode.com:80...
opened
<- "GET /nosuch/1 HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: jsonplaceholder.typicode.com\r\n\r\n"
-> "HTTP/1.1 404 Not Found\r\n"
-> "Date: Mon, 12 Dec 2022 21:14:11 GMT\r\n"
-> "Content-Type: application/json; charset=utf-8\r\n"
-> "Content-Length: 2\r\n"
-> "Connection: keep-alive\r\n"
-> "X-Powered-By: Express\r\n"
-> "X-Ratelimit-Limit: 1000\r\n"
-> "X-Ratelimit-Remaining: 999\r\n"
-> "X-Ratelimit-Reset: 1670879660\r\n"
-> "Vary: Origin, Accept-Encoding\r\n"
-> "Access-Control-Allow-Credentials: true\r\n"
-> "Cache-Control: max-age=43200\r\n"
-> "Pragma: no-cache\r\n"
-> "Expires: -1\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "Etag: W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\"\r\n"
-> "Via: 1.1 vegur\r\n"
-> "CF-Cache-Status: MISS\r\n"
-> "Server-Timing: cf-q-config;dur=1.3000000762986e-05\r\n"
-> "Report-To: {\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=yOr40jo%2BwS1KHzhTlVpl54beJ5Wx2FcG4gGV0XVrh3X9OlR5q4drUn2dkt5DGO4GDcE%2BVXT7CNgJvGs%2BZleIyMu8CLieFiDIvOviOY3EhHg94m0ZNZgrEdpKD0S85S507l1vsEwEHkoTm%2Ff19SiO\"}],\"group\":\"cf-nel\",\"max_age\":604800}\r\n"
-> "NEL: {\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}\r\n"
-> "Server: cloudflare\r\n"
-> "CF-RAY: 778977dc484ce591-DFW\r\n"
-> "alt-svc: h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400\r\n"
-> "\r\n"
reading 2 bytes...
-> "{}"
read 2 bytes
Conn keep-alive
Source
# File lib/net/http.rb, line 1625 def start # :yield: http raise IOError, 'HTTP session already opened' if @started if block_given? begin do_start return yield(self) ensure do_finish end end do_start self end
Startet eine HTTP-Sitzung.
Ohne Block gibt self zurück
http = Net::HTTP.new(hostname) # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false> http.start # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=true> http.started? # => true http.finish
Mit Block wird der Block mit self aufgerufen, die Sitzung wird beendet, wenn der Block beendet wird, und der Wert des Blocks zurückgegeben
http.start do |http| http end # => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false> http.started? # => false
Source
# File lib/net/http.rb, line 1488 def started? @started end
Gibt true zurück, wenn die HTTP-Sitzung gestartet wurde
http = Net::HTTP.new(hostname) http.started? # => false http.start http.started? # => true http.finish # => nil http.started? # => false Net::HTTP.start(hostname) do |http| http.started? end # => true http.started? # => false
Source
# File lib/net/http.rb, line 2254 def trace(path, initheader = nil) request(Trace.new(path, initheader)) end
Sendet eine TRACE-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Trace, das aus dem String pfad und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
http = Net::HTTP.new(hostname) http.trace('/todos/1')
Source
# File lib/net/http.rb, line 2161 def unlock(path, body, initheader = nil) request(Unlock.new(path, initheader), body) end
Sendet eine UNLOCK-Anfrage an den Server; gibt eine Instanz einer Unterklasse von Net::HTTPResponse zurück.
Die Anfrage basiert auf dem Objekt Net::HTTP::Unlock, das aus dem String pfad, dem String körper und dem Hash initheader mit Anfangskopfzeilen erstellt wurde.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}' http = Net::HTTP.new(hostname) http.unlock('/todos/1', data)
Source
# File lib/net/http.rb, line 1510 def use_ssl=(flag) flag = flag ? true : false if started? and @use_ssl != flag raise IOError, "use_ssl value changed, but session already started" end @use_ssl = flag end
Legt fest, ob eine neue Sitzung Transport Layer Security verwenden soll
Löst eine IOError aus, wenn versucht wird, sie während einer Sitzung zu ändern.
Löst eine OpenSSL::SSL::SSLError aus, wenn der Port kein HTTPS-Port ist.
Source
# File lib/net/http.rb, line 1500 def use_ssl? @use_ssl end
Gibt true zurück, wenn self SSL verwendet, andernfalls false. Siehe Net::HTTP#use_ssl=.
Source
# File lib/net/http.rb, line 1442 def write_timeout=(sec) @socket.write_timeout = sec if @socket @write_timeout = sec end
Legt das Schreibzeitlimit in Sekunden für self auf den Integer sek fest; der Anfangswert ist 60.
Das Argument sek muss ein nicht-negativer numerischer Wert sein
_uri = uri.dup _uri.path = '/posts' body = 'bar' * 200000 data = <<EOF {"title": "foo", "body": "#{body}", "userId": "1"} EOF headers = {'content-type': 'application/json'} http = Net::HTTP.new(hostname) http.write_timeout # => 60 http.post(_uri.path, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true> http.write_timeout = 0 http.post(_uri.path, data, headers) # Raises Net::WriteTimeout.
Private Instanzmethoden
Source
# File lib/net/http.rb, line 2422 def send_entity(path, data, initheader, dest, type, &block) res = nil request(type.new(path, initheader), data) {|r| r.read_body dest, &block res = r } res end
Führt eine Anfrage aus, die eine Repräsentation verwendet, und gibt deren Körper zurück.