কার্ল ব্যবহার করে HTTP পোষ্ট থেকে কেবল প্রতিক্রিয়া শিরোনাম পাওয়া


561

বিকল্পগুলির -Iমধ্যে HTTP শিরোনাম ব্যবহার করে কেউ কেবল শিরোনামের জন্য অনুরোধ করতে পারে curl(1)

$ curl -I /

দৈর্ঘ্য এইচটিএমএল প্রতিক্রিয়া সংস্থাগুলি কমান্ড-লাইন পেতে একটি ব্যথা, তাই আমি আমার পোস্টের অনুরোধগুলির প্রতিক্রিয়া হিসাবে কেবল শিরোনাম পেতে চাই। তবে, হেড এবং পোস্ট দুটি পৃথক পদ্ধতি।

পোস্টের অনুরোধে কেবল প্রতিক্রিয়া শিরোনাম প্রদর্শন করতে আমি কীভাবে কার্ল পাব?

উত্তর:


773
-D, --dump-header <file>
       Write the protocol headers to the specified file.

       This  option  is handy to use when you want to store the headers
       that a HTTP site sends to you. Cookies from  the  headers  could
       then  be  read  in  a  second  curl  invocation by using the -b,
       --cookie option! The -c, --cookie-jar option is however a better
       way to store cookies.

এবং

-S, --show-error
       When used with -s, --silent, it makes curl show an error message if it fails.

এবং

-L/--location
      (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
      code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from  all  requested
      pages  will  be  shown.  When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different
      host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
      follow by using the --max-redirs option.

      When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
      response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following  request  using  the  same  unmodified
      method.

ম্যান পৃষ্ঠা থেকে সুতরাং

curl -sSL -D - www.acooke.org -o /dev/null

পুনঃনির্দেশগুলি অনুসরণ করে, হেডারকে স্টাডআউটে ফেলে দেয় এবং ডেটা / dev / নালকে প্রেরণ করে (এটি একটি জিইটি, কোনও পোষ্ট নয়, তবে আপনি পোষ্ট দিয়ে একই জিনিসটি করতে পারেন - পোস্টিং ডেটার জন্য আপনি ইতিমধ্যে যে বিকল্পটি ব্যবহার করছেন তা যুক্ত করুন)

-পরে নোট করুন -Dযা আউটপুট "ফাইল" stdout হয় তা নির্দেশ করে।


22
উপরের মন্তব্যটি বৈধ যদি আপনি পাওয়ার শেল ব্যবহার করেন। cmd.exe ব্যবহারের জন্যcurl -s -D - http://yahoo.com -o nul
জেজেএস

1
আমার জন্য @ জেজেএস Win নুল উইন 7 এ কাজ করেছে on এটি কি উইন্ডোজে সিলেঙ্ক ইনস্টল করার কারণে?
সত্য প্রকাশ

17
URL- এর সামনে থাকা "-" গুরুত্বহীন মনে হতে পারে, তবে তা নয়।
ওয়াহিদ সাদিক

1
@ ওয়াহিদসাদিক বিশেষত কেসটি কেন? একক ড্যাশ এর কাজ কি?
মামাঙ্কো

4
@ মামাঙ্কো -Dএকটি যুক্তি নিয়েছেন যা বলে যে আউটপুটটি কোথায় যাওয়া উচিত। একক ড্যাশ মানে এটি স্টডআউটে যাওয়া উচিত।
অ্যান্ড্রু কুক

172

অন্যান্য উত্তরগুলির জন্য প্রতিক্রিয়া বডিটি ডাউনলোড করা দরকার। তবে একটি পোষ্ট অনুরোধ করার একটি উপায় আছে যা কেবল শিরোনাম আনবে:

curl -s -I -X POST http://www.google.com

একটি -Iনিজে HEAD রিকোয়েস্ট যার দ্বারা ওভাররাইড করা যেতে পারে সঞ্চালিত -X POSTএকটি পোস্ট (বা অন্য কোন) অনুরোধ সম্পাদনের জন্য এবং এখনও শুধুমাত্র হেডার তথ্য পেতে।


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

6
এটি আমার মতে সবচেয়ে সঠিক উত্তর। এটি স্মরণে রাখা সহজ, এটি আসলে GETঅনুরোধ প্রেরণ করে এবং পুরো প্রতিক্রিয়াটির শরীরটি ডাউনলোড করে না (বা কমপক্ষে এটি আউটপুট দেয় না)। -sপতাকা না প্রয়োজন।
স্কোজিন

@ জেফপুকেটআইআই আমি বেশ দয়ালু নীটপিকিং করে বলব। আপনি প্রতিস্থাপন করতে পারেন GETসঙ্গে POSTউপরোক্ত কমান্ডে এবং এটি আশানুরূপ কাজ হবে। or any otherকী আছে।
ছন্তিয়াল

18
আপনি যখন POSTকিছু ডেটা চান তখন এটি কাজ করে না । কার্ল বলেছেন:Warning: You can only select one HTTP request method! You asked for both POST Warning: (-d, --data) and HEAD (-I, --head).
সেবাস্তিয়ান

2
@ নিকবোল্ড্ট এখানে বক্তব্যটি হ'ল একটি সার্ভার একটি পোষ্ট বা জিইটি অনুরোধের চেয়ে একটি হেড অনুরোধের জন্য আলাদাভাবে প্রতিক্রিয়া জানাতে পারে (এবং কিছু সার্ভার আসলে এটি করে), সুতরাং -X HEADএখানে কোনও নির্ভরযোগ্য সমাধান নেই।
সেরাকুসা

58

নিম্নলিখিত কমান্ড অতিরিক্ত তথ্য প্রদর্শন করে

curl -X POST http://httpbin.org/post -v > /dev/null

আপনি সার্ভারকে পুরো সাড়া না দিয়ে কেবল হেড পাঠাতে বলতে পারেন

curl -X HEAD -I http://httpbin.org/

Note:কিছু ক্ষেত্রে, সার্ভার পোস্ট এবং হেডের জন্য বিভিন্ন শিরোনাম প্রেরণ করতে পারে। তবে প্রায় সব ক্ষেত্রেই শিরোনাম একই থাকে।


5
দুর্ভাগ্য যে অন্য উত্তরটি জিতেছে, কারণ এটি সঠিক উত্তর - এটি অযৌক্তিকভাবে এক টন ডেটা স্থানান্তর করে না।
ড্যানিয়েল

1
@ ডিএমডি যদি আমি -X, --requestসঠিকভাবে সিআরএল ম্যানুয়ালটি বুঝতে পারি তবে তারপরেও -X HEAD"এক টন ডেটা" ফলাফল আসে তবে এমনটি রয়েছে -I, --headযা আপনি প্রত্যাশা করছেন in
ড্যানিয়েল এ আর ওয়ার্নার

1
আপনি এটি সঠিকভাবে বুঝতে পারবেন না। -X HEADএবং -Iঠিক সমতুল্য।
ড্যানিয়েল

18
সমস্যাটি -X HEADহ'ল সার্ভারটি ভিন্নভাবে প্রতিক্রিয়া জানায়, যেহেতু এটি এখন (বা পূর্ববর্তী অনুরোধটি যা কিছু হোক) HEADপরিবর্তে একটি অনুরোধ পেয়েছেGET
গ্রাভ

4
Warning: Setting custom HTTP method to HEAD with -X/--request may not work the Warning: way you want. Consider using -I/--head instead.
ডোরিয়ান

53

দীর্ঘ প্রতিক্রিয়াশীল সংস্থাগুলির জন্য (এবং অন্যান্য অন্যান্য অনুরূপ পরিস্থিতিতে), আমি যে সমাধানটি ব্যবহার করি তা সর্বদা পাইপ দেওয়া less, তাই

curl -i https://api.github.com/users | less

অথবা

curl -s -D - https://api.github.com/users | less

কাজ করবে


এগুলি সমতুল্য নয় । প্রথমটিতে একটি HEADঅনুরোধ জারি করা হয় যাতে অনেক সার্ভার আলাদাভাবে প্রতিক্রিয়া জানায়। দ্বিতীয়টি একটি GETঅনুরোধ জারি করে যা আমরা এখানে যা খুঁজছি তার চেয়ে বেশি অনুরূপ।
গ্লাজ

25

সম্ভবত এটি সামান্য কিছুটা হলেও আমি এই সুপার শর্ট সংস্করণটি ব্যবহার করছি:

curl -svo. <URL>

ব্যাখ্যা:

-v মুদ্রণ ডিবাগ তথ্য (যা শিরোনাম অন্তর্ভুক্ত)

-o..এই ক্ষেত্রে ওয়েব পৃষ্ঠার ডেটা (যা আমরা উপেক্ষা করতে চাই) একটি নির্দিষ্ট ফাইলে প্রেরণ করুন, এটি একটি ডিরেক্টরি এবং এটি একটি অবৈধ গন্তব্য এবং আউটপুটটিকে উপেক্ষা করার সুযোগ করে দেয়।

-sকোনও অগ্রগতি বার নেই, কোনও ত্রুটির তথ্য নেই (অন্যথায় আপনি দেখতে পাবেন Warning: Failed to create the file .: Is a directory)

সতর্কতা: ফলাফল সর্বদা ব্যর্থ হয় (ত্রুটি কোডের শর্তে, যদি পৌঁছতে পারে বা না হয়)। শেল স্ক্রিপ্টিং-এ শর্তযুক্ত বিবৃতি ব্যবহার করুন, বলুন না ...


1
এর -o.পরিবর্তে কেন ব্যবহার করবেন -o /dev/null?
bfontaine

@bfontaine বংশবৃদ্ধির -o.জন্য বনাম -o /dev/nullব্যবহার করা হয়
এক্সবুক

এটির আচরণ একই রকম হয় না, সুতরাং এটি কেবল 8 টি অক্ষর সংরক্ষণ করতে ব্যবহার করা অবাক।
bfontaine

2
@ ফোফটেনের অন্যান্য উত্তর রয়েছে যা এটি দেখায় যে এটি সবচেয়ে সঠিক উপায়ে কীভাবে করা যায়, এটি একটি সংক্ষিপ্ত বিকল্পটি দেখানোর জন্য যা মূলত একই জিনিসটি করে।
এক্সবুক

আপনার উত্তরে আপনার স্পষ্ট করা উচিত যে এই আদেশটি সর্বদা ব্যর্থ হয়। curl -svo. <url> && echo fooপ্রিন্ট করা হবে না fooকারণ -o.করতে curlএকটি নন-জিরো (= ত্রুটি) কোড ফিরে curl: (23) Failed writing body
bfontaine


14

যদিও অন্য উত্তরগুলি সকল পরিস্থিতিতে আমার পক্ষে কাজ করে নি, সেরা সমাধানটি আমি খুঁজে পেতে পারি ( POSTপাশাপাশি কাজ করতে পারি ), এখান থেকে নেওয়া :

curl -vs 'https://some-site.com' 1> /dev/null


1
এই কাজটি পেতে আমাকে উক্তিগুলির মধ্যে ইউআরএল রাখতে হয়েছিল।
ক্রিস্টোফ ওয়েইস

1
এটি প্রয়োজনীয় কিনা তা ইউআরএল এবং ব্যবহৃত শেলের উপর নির্ভর করে। আমি সেই অনুযায়ী উত্তরটি উন্নত করেছি। ধন্যবাদ।
ড্যানিয়েল এ আর ওয়ার্নার

3

headcurl.cmd (উইন্ডোজ সংস্করণ)

curl -sSkv -o NUL %* 2>&1
  • আমি একটি অগ্রগতি বার চাই না -s,
  • তবে আমি ত্রুটিগুলি চাই -S,
  • বৈধ https শংসাপত্র সম্পর্কে বিরক্ত না -k,
  • উচ্চতর ভারবোসিটি পাচ্ছেন -v(এটি সমস্যা সমাধানের বিষয়, তাই না?),
  • কোন আউটপুট (একটি পরিষ্কার উপায়ে)।
  • ওহ, এবং আমি স্টারডার ফরোয়ার্ড করতে চাই করার stdout- এ , তাই আমি পুরো জিনিস বিরুদ্ধে grep করতে পারেন (যেহেতু সবচেয়ে অথবা সমস্ত আউটপুট দ্বারা stderr আসে)
  • %* মানে [এই স্ক্রিপ্টের সমস্ত পরামিতিগুলিতে পাস করুন] (ভাল ( https://stackoverflow.com/a/980372/444255 ), সাধারণত এটি কেবল একটি পরামিতি: আপনি যে url টি পরীক্ষা করছেন

বাস্তব-বিশ্বের উদাহরণ (প্রক্সি সমস্যার সমাধানের ক্ষেত্রে):

C:\depot>headcurl google.ch | grep -i -e http -e cache
Hostname was NOT found in DNS cache
GET HTTP://google.ch/ HTTP/1.1
HTTP/1.1 301 Moved Permanently
Location: http://www.google.ch/
Cache-Control: public, max-age=2592000
X-Cache: HIT from company.somewhere.ch
X-Cache-Lookup: HIT from company.somewhere.ch:1234

লিনাক্স সংস্করণ

আপনার জন্য .bash_aliases/ .bash_rc:

alias headcurl='curl -sSkv -o /dev/null $@  2>&1'

এটি দেহটি ডাউনলোড করবে এবং ব্যান্ডউইথ, সময় গ্রহণ করবে। @siracusa এর উত্তর ( stackoverflow.com/a/38679650/6168139 ) এই উপরি নেই।
রাশি

যদি আপনি যখন পোস্ট করতে চান -X POSTতবে পাসথ্রু প্যারামিটারগুলিতে যুক্ত করুন, আপনি জিইটি চাইলে জিইটি (অর্থাত্ ডিফল্ট) ব্যবহার করুন, কারণ প্রতিক্রিয়াগুলি পৃথক হতে পারে। - আপনি যদি উত্পাদন স্ক্রিপ্টগুলিতে ভারী কার্লিং না করেন (রোগ নির্ণয় এবং উন্নয়নের জন্য নয়) তবে আমি কিছুটা ব্যান্ডউইথের যত্ন নেই।
ফ্রাঙ্ক নোক্ক

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

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