কমান্ড লাইন থেকে সিআরএল কীভাবে ব্যবহার রক্ষণশীল করতে পারি?


36

আমি যাচাই করার চেষ্টা করছি যে টমক্যাট ওয়েবসভারের সাথে যোগাযোগের সময় এইচটিটিপি অবিচ্ছিন্ন সংযোগগুলি ব্যবহার করা হচ্ছে। বর্তমানে, আমি আমার সার্ভারে একটি ব্রাউজার (যেমন ক্রোম) থেকে একটি সংস্থান পুনরুদ্ধার করতে এবং সংযোগটি প্রতিষ্ঠিত হয়েছে নেটস্পট ব্যবহার করে যাচাই করতে পারি:

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

তবে, আমি যদি কার্ল ব্যবহার করি তবে নেটসটায় সার্ভারের সাথে আমি কখনও সংযোগটি দেখতে পাচ্ছি না।

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

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

আমি নিম্নলিখিত কার্ল কমান্ডটি ব্যবহার করার চেষ্টা করেছি:

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

এখানে আমার ক্লায়েন্ট মেশিনের কার্ল সংস্করণ:

[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

অবিচ্ছিন্ন / রক্ষণশীল সংযোগটি ব্যবহার করার জন্য আমি কীভাবে কার্ল পেতে পারি? আমি এই বিষয়টিতে বেশ কিছুটা গুগলিং করেছি, তবে কোন সাফল্য পাইনি। এটা তোলে উল্লেখ করা উচিত যে আমি ব্যবহার করেছি linksসম্পদ আহরণের জন্য ক্লায়েন্ট মেশিনে, এবং যে কাজ করে আমাকে একটি দিতে ESTABLISHEDসার্ভারে সংযোগ নেই।

আমার আরও তথ্য সরবরাহ করার প্রয়োজন হলে আমাকে জানান।


উত্তর:


38

কার্ল ইতিমধ্যে ডিফল্টরূপে রক্ষণশীল ব্যবহার করে।

উদাহরণ হিসাবে:

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

নিম্নলিখিত উত্পাদন করে:

* 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

এই স্নিপেট:

* সংযুক্তি 0 0 www.google.com হোস্ট করতে অক্ষত বামে
* বিদ্যমান সংযোগটি পুনরায় ব্যবহার! (# 0) হোস্ট www.google.com.com সহ

এটি একই সংযোগটি পুনরায় ব্যবহৃত ইঙ্গিত করে।

curl -v http://my.server/url1 http://my.server/url2আপনার সার্ভারের বিরুদ্ধে একই " " অনুরোধটি ব্যবহার করুন এবং পরীক্ষা করুন যে আপনি একই বার্তাটি দেখছেন।

প্যাকেটগুলি কীভাবে পরিচালনা করা হয় তা দেখতে নেটস্ট্যাটের পরিবর্তে tcpdump ব্যবহার করার বিষয়টি বিবেচনা করুন। নেটস্ট্যাট আপনাকে যা ঘটছে তার কেবলমাত্র ক্ষণিক ঝলক দেবে, অন্যদিকে, টিসিপিডাম্পের সাথে আপনি প্রতিটি প্যাকেট জড়িত দেখবেন। অন্য বিকল্পটি ওয়্যারশার্ক।


উত্তর করার জন্য ধন্যবাদ. হ্যাঁ, আমি বুঝতে পেরেছি যে বেশিরভাগ HTTP ক্লায়েন্টরা ডিফল্টরূপে রক্ষণশীল ব্যবহার করে। আমি অনুমান করি যে আমি যা অনুসন্ধান করার চেষ্টা করছি তা হ'ল আমি যখন কার্ল ব্যবহার করছি কেবল তখনই আমি ESTABLISHEDসার্ভারে সংযোগটি দেখি না ।
রব হুরস্কা

7
আপনি যদি কার্লের মাধ্যমে কেবল একটি সিআরএল অনুরোধ করেন তবে কার্লকে কিছু বাঁচিয়ে রাখার কোনও কারণ নেই। সমস্ত ইউআরএল আনার সাথে সাথে কার্ল প্রক্রিয়াটি সমাপ্ত হবে। দুটি ইউআরএল উল্লেখ করুন (এটি একই বারেও একই ইউআরএল হতে পারে) এবং "কার্ল-ভি" দ্বারা উত্পাদিত আউটপুটটিতে নজর রাখুন। নেটস্যাট চলার সময় সংযোগটি ইতিমধ্যে বন্ধ হয়ে গেছে কারণ কার্ল আর চলছে না এবং সংযোগটি খোলা রাখার কারণ আর নেই।
রওশন

1
এটা বোধগম্য; এটির মালিকানাধীন প্রক্রিয়াটি যদি শেষ হয়ে যায় তবে সংযোগটি শুয়ে থাকার কোনও অর্থ হবে না। আপনার সাহায্যের জন্য ধন্যবাদ.
রব হুশকা

8

যদি আপনার সার্ভার 'কিপএলাইভ চালু' রাখার অনুমতি দেয় তবে আপনি অবিচ্ছিন্ন সংযোগটি এভাবে চলতে রাখতে টেলনেট ব্যবহার করতে পারেন:

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

সুন্দর। দূরে লুপ করার সময় একটি কার্লকে বিট করে।
মাইকেল ওজরিয়ানস্কি

আমার কিপএলাইভটাইমআউট পরিবর্তনটি সঠিকভাবে প্রয়োগ করা হয়েছে কিনা তা পরীক্ষা করার চেষ্টা করছিলাম - এটি কেবল টিকিট ছিল। ধন্যবাদ!
ডেভ গ্রেগরি

6

এইচটিটিপি স্থির সংযোগ / কিপ-অ্যালাইভ পরীক্ষা করার একটি উপায় হ'ল টিসিপি সংযোগটি পরবর্তী সংযোগগুলির জন্য পুনরায় ব্যবহৃত হচ্ছে কিনা তা।

উদাহরণ স্বরূপ. আমার কাছে http://google.com লিঙ্কযুক্ত একটি ফাইল একাধিকবার পুনরাবৃত্তি হয়েছে।

কমান্ডের নীচে চালানো একই টিসিপি সংযোগের সাথে একাধিকবার http://google.com খুলবে ।

curl -K /tmp/file

এবং এই সময়ের মধ্যে আপনি যদি নেটস্যাট করেন তবে আপনি দেখতে পাবেন যে টিসিপি সংযোগের কোনও পরিবর্তন হয়নি এবং পুরানোটির পুনরুদ্ধার করা হয়েছে (সকেটটি একই থাকে)।

$ 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   

তবে আমরা যখন ক্লায়েন্টকে HTTP 1.0 ব্যবহার করতে বলি যা ডোজ স্থির HTTP সংযোগটি সমর্থন করে না সকেটের ঠিকানা পরিবর্তনগুলি

$ 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       

এ থেকে আমরা নিশ্চিত হতে পারি যে টিসিপি সংযোগটি পুনরায় ব্যবহৃত হয়েছে।


5

--keepalive টাইম

man curl ... man ..: D


2
আমি ম্যান পৃষ্ঠাটি পড়েছি, ধন্যবাদ। আপনি --keepalive-time 60আমার উদাহরণে খেয়াল করেন নি ?
রব হুশকা

3
ওহ ... আমি এখন বোকা বোধ করছি :(
আরেনস্টার

8
উপরে প্রস্তাবিত হিসাবে "কিপালাইভ-টাইম" নির্দিষ্ট করা এইচটিটিপি-স্তরকে বাঁচিয়ে রাখে না; এটি নিম্ন-স্তরের টিসিপি সংযোগকে প্রভাবিত করে। ম্যান পেজ থেকে ( curl.haxx.se/docs/manpage.html ): "এই অপশনটি ক্যাপালাইভ প্রোব প্রেরণের আগে সংযোগটি নিষ্ক্রিয় থাকার সময় এবং পৃথক রক্ষণশীল তদন্তগুলির মধ্যে সময় নির্ধারণ করে।" এটি দুর্দান্ত যে অনেক ধরণের কিপ-আলাইভস রয়েছে যা থেকে বেছে নিতে হবে, আমি মনে করি;)
শাব্বিডু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.