it-swarm.com.de

Wie kann ich cURL veranlassen, Keepalive über die Befehlszeile zu verwenden?

Ich versuche zu überprüfen, ob während der Kommunikation mit einem von mir ausgeführten Tomcat-Webserver dauerhafte HTTP-Verbindungen verwendet werden. Derzeit kann ich eine Ressource auf meinem Server von einem Browser (z. B. Chrome) abrufen und mithilfe von netstat überprüfen, ob die Verbindung hergestellt wurde:

# visit http://server:8080/path/to/resource in Chrome
[server:/tmp]$ netstat -a
...
tcp        0      0 server.mydomain:webcache client.mydomain:55502 ESTABLISHED

Wenn ich jedoch curl verwende, wird die Verbindung auf dem Server in netstat nie angezeigt.

[client:/tmp]$ curl --keepalive-time 60 --keepalive http://server:8080/path/to/resource
...

[server:/tmp]$ netstat -a
# no connection exists for client.mydomain

Ich habe auch versucht, den folgenden Curl-Befehl zu verwenden:

curl -H "Keep-Alive: 60" -H "Connection: keep-alive" http://server:8080/path/to/resource

Hier ist die Curl-Version meines Client-Computers:

[server:/tmp]$ curl -V
curl 7.19.5 (x86_64-unknown-linux-gnu) libcurl/7.19.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5 libssh2/1.1
Protocols: tftp ftp telnet dict http file https ftps scp sftp
Features: IDN IPv6 Largefile NTLM SSL libz

Wie kann ich Curl dazu bringen, eine dauerhafte/Keepalive-Verbindung zu verwenden? Ich habe ziemlich viel zu diesem Thema gegoogelt, aber ohne Erfolg. Es sollte beachtet werden, dass ich auch links auf dem Client-Computer verwendet habe, um die Ressource abzurufen, und dass mir eine gibt ESTABLISHED Verbindung auf dem Server.

Lassen Sie mich wissen, wenn ich weitere Informationen benötigen.

40
Rob Hruska

curl verwendet standardmäßig bereits keepalive.

Als Beispiel:

curl -v http://www.google.com http://www.google.com

Produziert folgendes:

* About to connect() to www.google.com port 80 (#0)
*   Trying 74.125.39.99... connected
* Connected to www.google.com (74.125.39.99) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
> Host: www.google.com
> Accept: */*
> 
< HTTP/1.1 302 Found
< Location: http://www.google.ch/
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Set-Cookie: PREF=ID=0dd153a227433b2f:FF=0:TM=1289232886:LM=1289232886:S=VoXSLP8XWvjzNcFj; expires=Wed, 07-Nov-2012 16:14:46 GMT; path=/; domain=.google.com
< Set-Cookie: NID=40=sOJuv6mxhQgqXkVEOzBwpUFU3YLPQYf4HRcySE1veCBV5cPtP3OiLPKqvRxL10VLiFETGz7cu25pD_EoUq1f_CkNwOna-xRcFFsCokiFqIbGPrb6DmUO7XhcpMYOt3dB; expires=Tue, 10-May-2011 16:14:46 GMT; path=/; domain=.google.com; HttpOnly
< Date: Mon, 08 Nov 2010 16:14:46 GMT
< Server: gws
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.ch/">here</A>.
</BODY></HTML>
* Connection #0 to Host www.google.com left intact
* Re-using existing connection! (#0) with Host www.google.com
* Connected to www.google.com (74.125.39.99) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
> Host: www.google.com
> Accept: */*
> 
< HTTP/1.1 302 Found
< Location: http://www.google.ch/
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Set-Cookie: PREF=ID=8b531815cdfef717:FF=0:TM=1289232886:LM=1289232886:S=ifbAe1QBX915QGHr; expires=Wed, 07-Nov-2012 16:14:46 GMT; path=/; domain=.google.com
< Set-Cookie: NID=40=Rk86FyMCV3LzorQ1Ph8g1TV3f-h41NA-9fP6l7G-441pLEiciG9k8L4faOGC0VI6a8RafpukiDvaNvJqy8wExED9-Irzs7VdUQYwI8bCF2Kc2ivskb6KDRDkWzMxW_xG; expires=Tue, 10-May-2011 16:14:46 GMT; path=/; domain=.google.com; HttpOnly
< Date: Mon, 08 Nov 2010 16:14:46 GMT
< Server: gws
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.ch/">here</A>.
</BODY></HTML>
* Connection #0 to Host www.google.com left intact
* Closing connection #0

Dieser Ausschnitt:

 * Verbindung Nr. 0 zum Host www.google.com intakt gelassen 
 * Bestehende Verbindung wiederverwenden! (# 0) mit Host www.google.com 

Zeigt an, dass dieselbe Verbindung erneut verwendet wurde.

Verwenden Sie das gleiche "curl -v http://my.server/url1 http://my.server/url2 "Aufruf gegen Ihren Server und überprüfen Sie, ob Sie die gleiche Nachricht sehen.

Verwenden Sie tcpdump anstelle von netstat, um zu sehen, wie die Pakete behandelt werden. netstat gibt Ihnen nur einen kurzen Einblick in das Geschehen, während Sie mit tcpdump jedes einzelne betroffene Paket sehen. Eine weitere Option ist Wireshark.

41
Roshan

Wenn Ihr Server "KeepAlive On" zulässt, können Sie Telnet verwenden, um eine dauerhafte Verbindung wie folgt aufrechtzuerhalten:

$ while :;do echo -e "GET / HTTP/1.1\nhost: $YOUR_VIRTUAL_HOSTNAME\n\n";sleep 1;done|telnet $YOUR_SERVERS_IP 80
11
AXE Labs

Eine Möglichkeit zum Testen der dauerhaften HTTP-Verbindung/Keep-Alive besteht darin, festzustellen, ob die Verbindung TCP] für nachfolgende Verbindungen wiederverwendet wird.

Zum Beispiel. Ich habe eine Datei mit dem Link http://google.com mehrmals wiederholt.

Wenn Sie den folgenden Befehl ausführen, wird http://google.com mehrmals mit derselben TCP -Verbindung) geöffnet.

curl -K /tmp/file

Und während dieser Zeit, wenn Sie netstat, können Sie feststellen, dass sich die TCP -Verbindung nicht geändert hat und die ältere wiederhergestellt wird (Der Socket bleibt gleich).

$ Sudo netstat -pnt|grep curl
tcp        0      0 106.51.85.118:48682     74.125.236.69:80        ESTABLISHED 9732/curl       
$ Sudo netstat -pnt|grep curl
tcp        0      0 106.51.85.118:48682     74.125.236.69:80        ESTABLISHED 9732/curl       
$ Sudo netstat -pnt|grep curl
tcp        0      0 106.51.85.118:48682     74.125.236.69:80        ESTABLISHED 9732/curl   

Wenn wir den Client jedoch auffordern, HTTP 1.0 zu verwenden, das keine dauerhafte HTTP-Verbindung unterstützt, ändert sich die Socket-Adresse

$ curl -0 -K /tmp/file

$ Sudo netstat -pnt|grep curl
tcp        0      0 106.51.85.118:48817     74.125.236.69:80        ESTABLISHED 9765/curl       
$ Sudo netstat -pnt|grep curl
tcp        0      0 106.51.85.118:48827     74.125.236.69:80        ESTABLISHED 9765/curl       
$ Sudo netstat -pnt|grep curl
tcp        0     74 106.51.85.118:48838     74.125.236.69:80        ESTABLISHED 9765/curl       

daraus können wir sicher sein, dass die Verbindung TCP] wiederverwendet wird.

7
Kannan Mohan

- Keepupalive-Zeit

mann locken ... Mann ..: D.

5
Arenstar