`কার্ল -I` এবং` কার্ল-এক্স হেডের মধ্যে পার্থক্য `


70

আমি থেকে মজার সার্ভারের প্রকার দেখছিলাম http://www.reddit.com সঙ্গে curl -I http://www.reddit.comযখন আমি খেয়াল হল যে, curl -X HEAD http://www.reddit.comএকই কাজ করতে। তবে বাস্তবে তা হয় না।

আমি কেন জানতে আগ্রহী।

এটিই আমি দুটি কমান্ড চালাচ্ছি:

  • curl -I: প্রত্যাশিত হিসাবে কাজ করে, শিরোনামকে আউটপুট দেয় এবং উপস্থিত থাকে।

  • curl -X HEAD: কিছুই দেখায় না এবং ব্যবহারকারীর ইনপুটটির জন্য অপেক্ষা করছে বলে মনে হচ্ছে।

তবে, tsharkআমি দেখতে পাচ্ছি দ্বিতীয় কমান্ডটি একই HTML টি কোয়েরিটি প্রেরণ করে এবং সঠিক উত্তরটি গ্রহণ করে, তবে এটি এটি প্রদর্শন করে না এবং এটি সংযোগটি বন্ধ করে না।

curl -I

0.000000 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=47267342 TSER=0 WS=6
0.045392 213.248.111.106 -> 333.33.33.33 TCP http > 59675 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=2552532839 TSER=47267342 WS=1
0.045441 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=47267353 TSER=2552532839
0.045623 333.33.33.33 -> 213.248.111.106 HTTP HEAD / HTTP/1.1
0.091665 213.248.111.106 -> 333.33.33.33 TCP http > 59675 [ACK] Seq=1 Ack=155 Win=6432 Len=0 TSV=2552532886 TSER=47267353
0.861782 213.248.111.106 -> 333.33.33.33 HTTP HTTP/1.1 200 OK
0.861830 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [ACK] Seq=155 Ack=321 Win=6912 Len=0 TSV=47267557 TSER=2552533656
0.862127 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [FIN, ACK] Seq=155 Ack=321 Win=6912 Len=0 TSV=47267557 TSER=2552533656
0.910810 213.248.111.106 -> 333.33.33.33 TCP http > 59675 [FIN, ACK] Seq=321 Ack=156 Win=6432 Len=0 TSV=2552533705 TSER=47267557
0.910880 333.33.33.33 -> 213.248.111.106 TCP 59675 > http [ACK] Seq=156 Ack=322 Win=6912 Len=0 TSV=47267570 TSER=2552533705

curl -X HEAD

34.106389 333.33.33.33 -> 213.248.111.90 TCP 51690 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=47275868 TSER=0 WS=6
34.149507 213.248.111.90 -> 333.33.33.33 TCP http > 51690 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=3920268348 TSER=47275868 WS=1
34.149560 333.33.33.33 -> 213.248.111.90 TCP 51690 > http [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=47275879 TSER=3920268348
34.149646 333.33.33.33 -> 213.248.111.90 HTTP HEAD / HTTP/1.1
34.191484 213.248.111.90 -> 333.33.33.33 TCP http > 51690 [ACK] Seq=1 Ack=155 Win=6432 Len=0 TSV=3920268390 TSER=47275879
34.192657 213.248.111.90 -> 333.33.33.33 TCP [TCP Dup ACK 15#1] http > 51690 [ACK] Seq=1 Ack=155 Win=6432 Len=0 TSV=3920268390 TSER=47275879
34.823399 213.248.111.90 -> 333.33.33.33 HTTP HTTP/1.1 200 OK
34.823453 333.33.33.33 -> 213.248.111.90 TCP 51690 > http [ACK] Seq=155 Ack=321 Win=6912 Len=0 TSV=47276048 TSER=3920269022

আচরণে এই পার্থক্য সম্পর্কে কোনও ধারণা?


উত্তর:


66

মনে হচ্ছে পার্থক্যটির Content-Lengthশিরোনামের সাথে কীভাবে সম্পর্কযুক্ত এবং এটি উভয় কমান্ড দ্বারা কীভাবে আচরণ করা হয়।

তবে তাতে যাওয়ার আগে curl -X HEADকোনও আউটপুট দেয় না কারণ ডিফল্টরূপে, curlসুইচ -iসরবরাহ না করা থাকলে শিরোনামগুলি মুদ্রণ করে না ( -Iযদিও প্রয়োজন নেই)।

যাই হোক, curl -Iহেডার আনতে সঠিক উপায়। এটি কেবল শিরোনামের জন্য জিজ্ঞাসা করে এবং সংযোগটি বন্ধ করে দেয়।

অন্যদিকে curl -X HEAD -iবর্ণিত বাইট সংখ্যা সংক্রমণের জন্য অপেক্ষা করবে Content-Length। ক্ষেত্রে কোনও Content-Lengthনির্দিষ্ট না করে, আমার ধারণা এটি কিছু ডেটা বা সেই নির্দিষ্ট শিরোনামের জন্য অপেক্ষা করবে।

কিছু আচরণ যা এই আচরণটি দেখায়:

$ curl -X HEAD -i http://www.elpais.es
HTTP/1.1 301 Moved Permanently
Server: AkamaiGHost
Content-Length: 0
Location: http://www.elpais.com/
Date: Wed, 12 May 2010 06:35:57 GMT
Connection: keep-alive

কারণ Content-Length0, এই ক্ষেত্রে উভয় কমান্ড একই আচরণ করে। এবং সংযোগটি পরে বন্ধ হয়ে যায়।

$ curl -X HEAD -i http://slashdot.org
HTTP/1.1 200 OK
Server: Apache/1.3.41 (Unix) mod_perl/1.31-rc4
SLASH_LOG_DATA: shtml
X-Powered-By: Slash 2.005001296
X-Bender: Since I love you all so much, I'd like to give everyone hugs.
X-XRDS-Location: http://slashdot.org/slashdot.xrds
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=iso-8859-1
Content-Length: 115224
Date: Wed, 12 May 2010 06:37:20 GMT
X-Varnish: 1649060825 1649060810
Age: 1
Connection: keep-alive

curl: (18) transfer closed with 115224 bytes remaining to read

এই ক্ষেত্রে, একটি সময়সীমা (সম্ভবত বার্নিশ দ্বারা) বলে মনে হচ্ছে, তাই curlবিক্ষোভের যে সংযোগটি Content-Lengthবাইট সংখ্যা পাওয়ার আগে বন্ধ হয়ে গিয়েছিল ।

যাইহোক, মজার এক্স-বেন্ডার (উদাহরণে দেখানো হয়েছে) এবং এক্স-ফ্রাই (নিজের জন্য এটি চেষ্টা করুন) শিরোনাম দেখুন) :)


2
ক্ষেত্রে অন্য যে কেউ এটি সন্ধান করতে আসে: পিএইচপি এর কার্ল লাইব্রেরিতে সেট করার বিকল্পটি CURLOPT_NOBODY
ম্যাথু

12

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

http://sourceforge.net/tracker/?func=detail&atid=100976&aid=1810273&group_id=976

তবে কার্ল রক্ষণাবেক্ষণকারী এটি প্রত্যাখ্যান করেছেন। স্পষ্টতই একটি ভাঙা "-X HEAD" বিকল্পটি "ডিজাইন হিসাবে কাজ করছে"।

--Jamshid


4
ন্যায়সঙ্গত হওয়ার জন্য, আমি টিকিটের প্রতিক্রিয়াটির যুক্তিটি অনুসরণ করতে পারি: --headআমাদের একটি হেড অনুরোধটির বৈধ বাস্তবায়ন সরবরাহ করে এবং অনুরোধে -X <method>কেবল এইচটিটিপি পদ্ধতিকে ওভাররাইড করে।
হ্যাঁক

3
হ্যাঁ, এটি আসলে আমার প্রয়োজন ছিল। আমার একটি বগি সার্ভার রয়েছে যা একটি হেড অনুরোধ দেওয়ার সময় সামগ্রী সরবরাহ করে। -X HEADসার্ভারটি আরএফসি মেনে চলার চেষ্টা করার সময় আমি কেবল এটিই পরীক্ষা করতে পারি
হ্যাশব্রাউন

5

দস্তাবেজগুলি থেকে :

-এক্স, - প্রয়োজনীয়

(HTTP) HTTP সার্ভারের সাথে যোগাযোগ করার সময় ব্যবহার করার জন্য একটি কাস্টম অনুরোধ পদ্ধতি নির্দিষ্ট করে। নির্দিষ্ট অনুরোধ পদ্ধতি অন্যথায় ব্যবহৃত পদ্ধতির পরিবর্তে ব্যবহৃত হবে (যা জিইটি-তে ডিফল্ট হয়)। বিশদ এবং ব্যাখ্যার জন্য HTTP 1.1 স্পেসিফিকেশন পড়ুন। সাধারণ অতিরিক্ত এইচটিটিপি অনুরোধগুলির মধ্যে পুট এবং ডিলিট অন্তর্ভুক্ত থাকে তবে ওয়েবড্যাভের মতো সম্পর্কিত প্রযুক্তিগুলি প্রোফাইন্ড, কপি, মোভ এবং আরও অনেক কিছু সরবরাহ করে।

সাধারণত আপনার এই বিকল্পের প্রয়োজন নেই। সমস্ত ধরণের জিইটি, শির, পোষ্ট এবং পুট অনুরোধগুলির পরিবর্তে নিবেদিত কমান্ড লাইন বিকল্পগুলি ব্যবহার করে অনুরোধ করা হয়।

এই বিকল্পটি কেবল এইচটিটিপি অনুরোধে ব্যবহৃত প্রকৃত শব্দকে পরিবর্তন করে , কার্লের আচরণের পদ্ধতিতে এটি পরিবর্তন করে না । সুতরাং উদাহরণস্বরূপ আপনি যদি সঠিক হেড অনুরোধ করতে চান তবে -X হেড ব্যবহার করা যথেষ্ট হবে না। আপনাকে -I, - হেড বিকল্পটি ব্যবহার করতে হবে।

অন্য কথায়, -Xব্যতীত অন্য পদ্ধতি জন্য GET, HEAD, POSTএবং PUT। জন্য HEADব্যবহার -I


0

7.34 কার্লে সিপিপি কোড লেখার সময় আমি একই ইস্যুটি পূরণ করি,

curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, "HEAD");

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

curl_easy_setopt(curl_handle, CURLOPT_NOBODY, 1L );

ডক থেকে

দেহ না পেয়ে ডাউনলোডের অনুরোধটি করুন

এই লাইনটি কার্লকে অপেক্ষা না করতে বাধ্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.