सर्वर से अनुरोध भेजते समय कर्ल द्वारा किए गए अनुरोध हेडर कैसे देख सकते हैं?


485

curlजब मैं सर्वर को अनुरोध भेज रहा हूं तो मैं अनुरोध हेडर देखना चाहता हूं । मैं कैसे जांच कर सकता हूं?


यह url सहायक हो सकता है। helloacm.com/curl
doctorlai 22

जवाबों:


501

मुझे लगता curl -vहै कि सबसे आसान है। यह अनुरोध हेडर ('>' के साथ उपसर्गों वाली पंक्तियों) को किसी फ़ाइल में लिखे बिना थूक देगा:

$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
*   Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...

58
कर्ल -v -D - stackoverflow.com -o / dev / null (पूरी साइट की सामग्री, सिर्फ हेडर प्रदर्शित नहीं करने के लिए)
omnomnom

20
curl -Ivs http://example.com > /dev/null: -Iएक के लिए HEADअनुरोध, -vभेजे गए शीर्ष लेख को दिखाने के लिए, -s, छिपाने प्रगति बार के लिए > /dev/nullकेवल -v उत्पादन को दिखाने के लिए, दोहराव से बचने।
यहाँ

@PiotrekDe -D -साफ- सुथरा था, लेकिन मेरे लिए उपयोगी नहीं था क्योंकि यह केवल हेडर को दोहराता था जो -vपहले से ही प्रदर्शित थे। यदि आप उन्हें स्वचालित मशीन की खपत के लिए उपसर्ग चाहते हैं, तो शायद यह उस मामले में बेहतर होगा, लेकिन मैं केवल यह देखना चाहता था कि क्या समस्या अधिक विस्तार से थी।
पिसिस

1
"वर्बोज़" ध्वज की दो बहुत ही उपयोगी विशेषताएं हैं: पहला, यह HTTPS के माध्यम से वेबसाइट तक पहुंचने पर TLS हैंडशेक प्रक्रिया को भी प्रिंट करता है, जैसे curl -v https://www.example.com; दूसरा, यह CONNECTअनुरोध को भी प्रिंट करता है यदि आप HTTP प्रॉक्सी के माध्यम से साइट पर जा रहे हैं , जैसे कि curl --proxy my-proxy:8080 http://www.example.com। मेरा मानना ​​है कि इस उत्तर में इन दोनों विशेषताओं के कुछ उदाहरणों का उल्लेख किया जाए तो यह और अधिक उपयोगकर्ताओं की मदद करेगा।
फ्रेंकलिन यू

1
TL; DR:-I आधुनिक दुनिया में उपयोग न करें , जब लोग हेडर देखने के बारे में पूछते हैं, तो वे शायद एपीआई के बारे में बात कर रहे हैं। और अगर आप इसका उपयोग करते हैं कि "मैं -Iअपनी अपाचे वेबसर्वर के साथ हेडर देखने के लिए उपयोग करता हूं" मानसिकता, तो आप एक HEADविधि के खिलाफ विकसित होने में बहुत समय बर्बाद करने जा रहे हैं जब आप शायद उपयोग करने का मतलब रखते हैं GET। लोगों को इस्तेमाल करने के लिए कहना बंद करें -I। अगर वे चाहते हैं HEAD, तो -X HEAD(
TWSS

141

यह प्रश्न निर्दिष्ट नहीं करता है कि कमांड लाइन कमांड का नाम curlमतलब है या संपूर्ण cURL लाइब्रेरी है।

CURL लाइब्रेरी का उपयोग करने वाला निम्न PHP कोड HTTP पद्धति (जैसे "GET", "POST", "विकल्प") के रूप में पहला पैरामीटर और URL के रूप में दूसरा पैरामीटर का उपयोग करता है।

<?php
$ch = curl_init();
$f = tmpfile(); # will be automatically removed after fclose()
curl_setopt_array($ch, array(
    CURLOPT_CUSTOMREQUEST  => $argv[1],
    CURLOPT_URL            => $argv[2], 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 0,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_HEADER         => 0,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_STDERR         => $f,
));
$response = curl_exec($ch);
fseek($f, 0);
echo fread($f, 32*1024); # output up to 32 KB cURL verbose log
fclose($f);
curl_close($ch);
echo $response;

उदाहरण उपयोग:

php curl-test.php OPTIONS https://google.com

ध्यान दें कि परिणाम लगभग कमांड लाइन के समान हैं

curl -v -s -o - -X OPTIONS https://google.com

यह सबसे अच्छा उत्तर है, क्योंकि इस पद्धति में उपयोग की जाने वाली फ़ाइल में curl_getinfo () में सब कुछ नीचे दिया गया है, साथ ही अनुरोध और प्रतिक्रिया दोनों पर अधिक विवरण के साथ।
माइक_के।

3
आप हेडर की जानकारी के लिए CURLOPT_WRITEHEADER और CURLOPT_FILE का उपयोग पूरे स्थानांतरण के लिए कर सकते हैं
स्टिरॉकैड

1
ध्यान रखें कि यदि कनेक्शन से इनकार कर दिया जाता है जो फाइलों के साथ निर्दिष्ट थे CURLOPT_WRITEHEADER और CURLOPT_FILEखाली हैं।
17

34
उपयोग के बारे में कुछ भी किसने कहाphp?
एडी बी

1
Ive ने आपके उत्तर को रद्द कर दिया क्योंकि जब प्रश्न php से संबंधित नहीं था, तो आपके php आधारित उत्तर ने मुझे एक वाहक टोकन भेजने के साथ अपने स्वयं के मुद्दे को हल करने के लिए सही दिशा में इंगित किया। धन्यवाद। मैंने अपना कारण यहां बताया कि भविष्य में इसी तरह के मुद्दे के साथ php devs के लिए भविष्य की Google खोजों में यह प्रश्न दिखाने का व्यर्थ प्रयास किया गया है।
क्रिस

49

मेरे आउटगोइंग हेडर (php के साथ कर्ल) को देखने का एकमात्र तरीका निम्नलिखित विकल्पों का उपयोग कर रहा था:

curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

अपना डिबग जानकारी प्राप्त करना:

$data = curl_exec($ch);
var_dump($data);
var_dump(curl_getinfo($ch));

1
मेरे लिए जो प्रतिक्रिया हेडर प्रतीत होता है वह आउटगोइंग हेडर नहीं है।
टोबी

3
var_dump $dataप्रतिक्रिया शीर्षकों के साथ-साथ प्रतिक्रिया निकाय भी लौटाएगा। Var_dump curl_getinfo($ch)आपको अनुरोध शीर्षलेख देगा।
Jrgns

2
CURLOPT_HEADERप्रतिक्रिया शीर्षलेख है - CURLINFO_HEADER_OUTअनुरोध शीर्षलेख है। यह वही है जो ओपी के लिए पूछ रहा है :)
रिचर्ड परनाबी-राजा

44

कर्ल--trace-ascii करने का विकल्प अनुरोध हेडर, साथ ही प्रतिक्रिया हेडर और प्रतिक्रिया बॉडी दिखाएगा।

उदाहरण के लिए, कमांड

curl --trace-ascii curl.trace http://www.google.com/ 

एक फ़ाइल बनाता है curl.traceजो इस प्रकार है:

== Info: About to connect() to www.google.com port 80 (#0)
== Info:   Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050:  OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f: 

इसे एक प्रतिक्रिया भी मिली (302 प्रतिक्रिया, सटीक लेकिन अप्रासंगिक होने के लिए) जिसे लॉग किया गया था।


यदि आप केवल प्रतिक्रिया शीर्षलेख सहेजना चाहते हैं, तो --dump-headerविकल्प का उपयोग करें :

curl -D file url
curl --dump-header file url

यदि आपको उपलब्ध विकल्पों के बारे में अधिक जानकारी की आवश्यकता है, तो इसका उपयोग करें curl --help | less(यह आउटपुट के कुछ सौ लाइनों का उत्पादन करता है लेकिन बहुत सारे विकल्पों का उल्लेख करता है)। या मैनुअल पेज ढूंढें जहां विकल्पों का क्या अर्थ है, इसकी अधिक व्याख्या है।


10
-D आपको प्रतिक्रिया हेडर देता है (जैसा कि -I, लेकिन STDIN को)। अनुरोध हेडर के लिए पूछा गया प्रश्न ।
pr1001

34

curl --trace-ascii {फ़ाइल नाम} या फ़ाइल नाम के बजाय एक एकल डैश का उपयोग करके इसे stdout पर भेजा जाए:

curl --trace-ascii - {URL}

यदि आप libcurl का उपयोग कर रहे हैं तो CURLOPT_DEBUGFUNCTION

यह आपको दिखाता है कि सब कुछ कर्ल भेजता है और प्राप्त करता है, जिसमें कुछ अतिरिक्त जानकारी डाली जाती है।


1
यह बहुत ही क्रियात्मक है, लेकिन निश्चित रूप से आपको वह सब कुछ दिखाता है जो आपको जानना चाहिए।
ट्रिपल

26

मैंने यहां जवाबों की कोशिश की और पाया कि सबसे उपयोगी और आसान एक उत्तर के रूप में अभी तक सूचीबद्ध नहीं है, लेकिन यह है:

curl -v https://example.com/path

यह REQUEST हेडर के साथ-साथ RESPONSE हेडर और अन्य उपयोगी जैसे कि SSL सर्टिफिकेट को प्रिंट करता है और क्या मौजूदा टीसीपी कनेक्शन का पुन: उपयोग किया गया है। -vझंडा पुनः निर्देश का पालन करने के लिए और HTTP प्रमाणीकरण के लिए शीघ्र ही निश्चित रूप से अन्य झंडे,, साथ जोड़ा जा सकता:

curl -vL --user my_username https://example.com/path

उम्मीद है की यह मदद करेगा।


2
यह शीर्ष स्थान पर सूचीबद्ध है
Pmpr

19

नीचे दिए गए एक कमांड की तरह तीन खंड दिखाई देंगे: अनुरोध हेडर, प्रतिक्रिया हेडर और डेटा (CRLF द्वारा अलग)। यह तकनीकी जानकारी और कर्ल द्वारा जोड़े गए वाक्यात्मक शोर से बचा जाता है।

curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'

कमांड निम्न आउटपुट का उत्पादन करेगी:

GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>

विवरण:

  • -vs - हेडर (-v) जोड़ें, लेकिन प्रगति बार (-s) को हटा दें
  • 2>&1 - स्टैडआउट और स्टेडर को सिंगल स्टडआउट में मिलाएं
  • sed - नीचे दिए गए आदेशों का उपयोग करके कर्ल द्वारा निर्मित प्रतिक्रिया को संपादित करें
  • /^* /d - '*' (तकनीकी जानकारी) से शुरू होने वाली लाइनें हटाएं
  • /bytes data]$/d - 'बाइट्स डेटा]' (तकनीकी जानकारी) के साथ समाप्त होने वाली लाइनें हटाएं
  • s/> // - '>' उपसर्ग निकालें
  • s/< // - '<' उपसर्ग निकालें

11

मुझे पता है कि यह थोड़ा देर से है, लेकिन ऐसा करने के लिए मेरा पसंदीदा तरीका है netcat, जैसा कि आप वास्तव में curlभेजते हैं; यह उन विकल्पों --traceया --trace-asciiविकल्पों से भिन्न हो सकता है जो गैर-ASCII वर्णों को ठीक से नहीं दिखाएंगे (वे केवल डॉट्स के रूप में प्रदर्शित होते हैं या डिकोड किए जाने की आवश्यकता होती है)।

आप दो टर्मिनल विंडो खोलकर इसे बहुत आसानी से कर सकते हैं, पहले प्रकार में:

nc -l localhost 12345

यह आपके स्थानीय मशीन के पोर्ट 12345 पर एक सुनने की प्रक्रिया को खोलता है।

दूसरे टर्मिनल विंडो में अपना कर्ल कमांड दर्ज करें, उदाहरण के लिए:

curl --form 'foo=bar' localhost:12345

पहले टर्मिनल विंडो में आपको वही दिखाई देगा जो अनुरोध में भेजा गया है।

अब निश्चित रूप ncसे प्रतिक्रिया में कुछ भी नहीं भेजेंगे (जब तक कि आप इसे अपने आप में टाइप न करें), इसलिए आपको कर्ल कमांड (नियंत्रण-सी) को बाधित करने और प्रत्येक परीक्षण के लिए प्रक्रिया को दोहराने की आवश्यकता होगी।

हालाँकि, यह आपके अनुरोध को डीबग करने के लिए एक उपयोगी विकल्प है, क्योंकि आप कहीं भी एक गोल-यात्रा को शामिल नहीं कर रहे हैं, या कहीं फर्जी, पुनरावृत्ति अनुरोधों का उत्पादन नहीं कर रहे हैं जब तक कि आप इसे सही नहीं पाते; एक बार जब आप कमांड से खुश हो जाते हैं, तो बस इसे एक वैध URL पर पुनर्निर्देशित करें और आप जाने के लिए अच्छे हैं।

आप किसी भी cURL लाइब्रेरी के लिए भी ऐसा कर सकते हैं, बस स्थानीय ncश्रोता को इंगित करने के लिए अपने अनुरोध को तब तक संपादित करें जब तक आप इससे खुश न हों।


6

एक फ़ाइल में हेडर और एक अलग फ़ाइल में प्रतिक्रिया का पेलोड डंप करें

curl -k -v -u user:pass  "url" --trace-ascii headers.txt >> response.txt

5
कर्ल -s -v -o / dev / null -H "Testheader: परीक्षण" http://www.example.com

-Iयदि आप एक HEAD अनुरोध भेजना चाहते हैं और एक GET अनुरोध नहीं तो आप विकल्प का उपयोग भी कर सकते हैं।


3

यहाँ कुकीज़ के साथ पोस्ट प्रश्न बनाने के लिए php में मेरा http क्लाइंट है:

function http_login_client($url, $params = "", $cookies_send = "" ){

    // Vars
    $cookies = array();
    $headers = getallheaders();

    // Perform a http post request to $ur1 using $params
    $ch = curl_init($url);
    $options = array(   CURLOPT_POST => 1,
                        CURLINFO_HEADER_OUT => true,
                        CURLOPT_POSTFIELDS => $params,
                        CURLOPT_RETURNTRANSFER => 1,
                        CURLOPT_HEADER => 1,
                        CURLOPT_COOKIE => $cookies_send,
                        CURLOPT_USERAGENT => $headers['User-Agent']
                    );

    curl_setopt_array($ch, $options);

    $response = curl_exec($ch);

/// डेबग जानकारी प्रतिध्वनि $ प्रतिक्रिया; var_dump (curl_getinfo ($ ch)); ///

    // Parse response and read cookies
    preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);

    // Build an array with cookies
    foreach( $matches[1] as $index => $cookie )
        $cookies[$cookie] = $matches[2][$index];

    return $cookies;
} // end http_login_client

3

आप इसका उपयोग करके देख सकते हैं -iv

$> curl  -ivH "apikey:ad9ff3d36888957" --form  "file=@/home/mar/workspace/images/8.jpg" --form "language=eng" --form "isOverlayRequired=true" https://api.ocr.space/Parse/Image

1

आप किसी भी नेटवर्क ट्रैफ़िक (http भी) को देखने के लिए वायरशार्क या tcpdump का उपयोग कर सकते हैं ।


11
यदि पेलोड HTTPS से अधिक है, तो वे प्रॉक्सी या एप्लिकेशन लेयर मॉनिटर के बिना बेकार हैं।
p00ya

1

Https://http-tools.appspot.com/reflect-http-request/some-unique-id पर एक नमूना अनुरोध करें और देखें कि इस अनुरोध में क्या है (अनुरोध हैडर, अनुरोध निकाय, अनुरोध पैरामीटर) इसके संबंधित खोज यूआरएल https: // : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id । आप इसके बजाय किसी भी स्ट्रिंग का उपयोग कर सकते हैं some-unique-id, अधिक जानकारी के लिए https://http-tools.appspot.com देखें।


1
धन्यवाद, जबकि सवाल का सही जवाब नहीं दे रहा है, यह वही है जो मुझे चाहिए था। डिवाइस ए एक अनुरोध करता है, डिवाइस बी एक अनुरोध की जांच करता है।
domen
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.