আমি curl
যখন সার্ভারে একটি অনুরোধ প্রেরণ করছি তখন তৈরি করা অনুরোধ শিরোনামগুলি দেখতে চাই । আমি কীভাবে এটি পরীক্ষা করতে পারি?
আমি curl
যখন সার্ভারে একটি অনুরোধ প্রেরণ করছি তখন তৈরি করা অনুরোধ শিরোনামগুলি দেখতে চাই । আমি কীভাবে এটি পরীক্ষা করতে পারি?
উত্তর:
আমি মনে করি 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
...
curl -Ivs http://example.com > /dev/null
: -I
একটি জন্য HEAD
অনুরোধ, -v
পাঠানো হেডার দেখানোর জন্য, -s
, লুকান উন্নতি বারে > /dev/null
শুধুমাত্র -v আউটপুট দেখানোর জন্য, অনুলিপি এড়ানো।
-D -
পরিষ্কার ছিল, তবে এটি আমার পক্ষে কার্যকর ছিল না কারণ এটি -v
ইতিমধ্যে প্রদর্শিত শিরোনামগুলির অনুলিপি করে । আপনি যদি অটোমেটেড মেশিন ব্যবহারের জন্য এগুলিকে পূর্বনির্ধারিত করতে চান, তবে সম্ভবত সে ক্ষেত্রে এটি আরও ভাল হবে তবে আমি কী সমস্যাটি আরও বিশদে বিশদ ছিল তা কেবলই তা দেখতে চেয়েছিলাম।
curl -v https://www.example.com
; দ্বিতীয়, এটি ছাপে CONNECT
অনুরোধ আপনি মাধ্যমে সাইটটির পরিদর্শন করা হয়, তাহলে HTTP প্রক্সি যেমন curl --proxy my-proxy:8080 http://www.example.com
। আমি বিশ্বাস করি যে এই দুটি বৈশিষ্ট্যের কয়েকটি উদাহরণ এই উত্তরে উল্লেখ করা থাকলে এটি আরও ব্যবহারকারীদের সহায়তা করবে।
-I
আধুনিক বিশ্বে ব্যবহার করবেন না , লোকেরা যখন শিরোনাম দেখার বিষয়ে জিজ্ঞাসা করে, তারা সম্ভবত এপিআই সম্পর্কে কথা বলছে। এবং যদি আপনি সেই "আমি -I
আমার অ্যাপাচি ওয়েবসারভার সহ শিরোনামগুলি দেখতে ব্যবহার করি" মানসিকতা HEAD
ব্যবহার করেন তবে আপনি সম্ভবত যখন ব্যবহার করতে চান তখন কোনও পদ্ধতির বিরুদ্ধে বিকাশ করতে আপনি প্রচুর সময় নষ্ট করতে যাচ্ছেন GET
। লোকদের ব্যবহার করতে বলা বন্ধ করুন -I
। যদি তারা চান তবে (টিডব্লিউএসএস)HEAD
-X HEAD
কমান্ড লাইন কমান্ডটির নাম curl
বোঝানো হয়েছে বা পুরো সিআরএল লাইব্রেরি কিনা তা প্রশ্নটি নির্দিষ্ট করে নি ।
সিআরএল লাইব্রেরি ব্যবহার করে নিম্নলিখিত পিএইচপি কোডটি HTTP পদ্ধতি হিসাবে প্রথম প্যারামিটার ব্যবহার করে (যেমন "GET", "পোস্ট", "বিকল্প") এবং 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
CURLOPT_WRITEHEADER
এবং CURLOPT_FILE
খালি থাকে।
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));
var_dump $data
প্রতিক্রিয়া শিরোনাম পাশাপাশি প্রতিক্রিয়া বডি প্রদান করবে। Var_dump curl_getinfo($ch)
আপনাকে অনুরোধ শিরোনাম দেবে।
CURLOPT_HEADER
প্রতিক্রিয়া শিরোনাম - CURLINFO_HEADER_OUT
অনুরোধ শিরোনাম হয়। ওপি এটিই জিজ্ঞাসা করছে :)
--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
(এটি কয়েকশ লাইনের আউটপুট উত্পাদন করে তবে প্রচুর বিকল্পের উল্লেখ করে)। অথবা ম্যানুয়াল পৃষ্ঠাটি সন্ধান করুন যেখানে বিকল্পগুলির অর্থ কী তার আরও ব্যাখ্যা রয়েছে।
curl --trace-ascii {filename} বা স্ট্যান্ডআউটে প্রেরণের জন্য ফাইলের নামের পরিবর্তে একটি একক ড্যাশ ব্যবহার করুন:
curl --trace-ascii - {URL}
আপনি যদি libcurl ব্যবহার করেন তবে CURLOPT_DEBUGFUNCTION
এটি আপনাকে কিছু অতিরিক্ত তথ্য withোকানো সহ কার্ল প্রেরণ এবং গ্রহণ করে এমন সব কিছুই দেখায় ।
আমি এখানে উত্তরগুলি চেষ্টা করে দেখেছি যে সর্বাধিক দরকারী এবং সহজতমটি উত্তর হিসাবে এখনও তালিকাভুক্ত নয়, তবে এটি হল:
curl -v https://example.com/path
এটি REQUEST শিরোনামের পাশাপাশি RESPONSE শিরোনামের পাশাপাশি অন্যান্য দরকারী যেমন এসএসএল শংসাপত্র এবং বিদ্যমান টিসিপি সংযোগটি পুনরায় ব্যবহার করা হয়েছে কিনা তা প্রিন্ট করে । -v
পতাকা যেমন পুনঃনির্দেশ এবং অনুসরণ করতে HTTP প্রমাণীকরণের জন্য প্রম্পট হিসাবে অবশ্যই অন্যান্য পতাকার, সঙ্গে মিলিত করা যেতে পারে:
curl -vL --user my_username https://example.com/path
আশাকরি এটা সাহায্য করবে.
নীচের মত একটি কমান্ড তিনটি বিভাগ প্রদর্শন করবে: অনুরোধ শিরোনাম, প্রতিক্রিয়া শিরোনাম এবং ডেটা (সিআরএলএফ দ্বারা পৃথক)। এটি কারিগরী দ্বারা যুক্ত প্রযুক্তিগত তথ্য এবং সিনট্যাক্টিক্যাল শব্দকে এড়িয়ে চলে।
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) তবে অগ্রগতি বার (-এস) সরান2>&1
- স্ট্যান্ডআউট এবং স্টডারকে একক স্টডআউটে একত্রিত করুনsed
- নীচের কমান্ডগুলি ব্যবহার করে কার্ল দ্বারা উত্পাদিত প্রতিক্রিয়া সম্পাদনা করুন/^* /d
- '*' (প্রযুক্তিগত তথ্য) দিয়ে শুরু হওয়া লাইনগুলি সরান/bytes data]$/d
- 'বাইটস ডেটা]' দিয়ে শেষ হওয়া লাইনগুলি সরান (প্রযুক্তিগত তথ্য)s/> //
- '>' উপসর্গ মুছে ফেলুনs/< //
- '<' উপসর্গ মুছে ফেলুনআমি জানি এটি একটু দেরি হয়েছে, তবে এটি করার জন্য আমার অনুকূল পদ্ধতিটি হ'ল netcat
আপনি যা curl
পাঠিয়েছেন ঠিক তেমনই; এটি --trace
বা --trace-ascii
বিকল্পগুলির থেকে পৃথক হতে পারে যা অ-এএসসিআইআই অক্ষরগুলি সঠিকভাবে প্রদর্শন করবে না (তারা কেবল বিন্দু হিসাবে দেখায় বা ডিকোডিং করা দরকার)।
প্রথম প্রকারে দুটি টার্মিনাল উইন্ডো খোলার মাধ্যমে আপনি এটি খুব সহজেই করতে পারেন:
nc -l localhost 12345
এটি আপনার স্থানীয় মেশিনের 12345 পোর্টে শ্রবণ প্রক্রিয়াটি খুলবে।
দ্বিতীয় টার্মিনাল উইন্ডোতে আপনার কার্ল কমান্ড লিখুন, উদাহরণস্বরূপ:
curl --form 'foo=bar' localhost:12345
প্রথম টার্মিনাল উইন্ডোতে আপনি অনুরোধে ঠিক কী কার্ল প্রেরণ করেছেন তা দেখতে পাবেন ।
এখন অবশ্যই nc
প্রতিক্রিয়াতে কিছু প্রেরণ করবে না (যদি আপনি এটি নিজের মধ্যে টাইপ না করেন), তাই আপনাকে কার্ল কমান্ড (কন্ট্রোল-সি) বাধা দিতে হবে এবং প্রতিটি পরীক্ষার জন্য প্রক্রিয়াটি পুনরাবৃত্তি করতে হবে।
তবে, আপনার অনুরোধটি কেবল ডিবাগ করার জন্য এটি একটি দরকারী বিকল্প, কারণ আপনি কোথাও কোনও রাউন্ড ট্রিপ জড়িত করছেন না বা বোগাস উত্পাদন করছেন না, যতক্ষণ না আপনি এটি সঠিক না হওয়া পর্যন্ত কোথাও পুনরাবৃত্তি অনুরোধগুলি; আপনি যখন আদেশটি দ্বারা খুশি হন, কেবলমাত্র এটি কোনও বৈধ URL এ পুনঃনির্দেশ করুন এবং আপনি যেতে ভাল।
আপনি যে কোনও সিআরএল লাইব্রেরির জন্যও একই কাজ করতে পারেন, nc
আপনি যতক্ষণ না খুশি হন ততক্ষণ স্থানীয় শ্রোতার প্রতি নির্দেশ করার জন্য আপনার অনুরোধটি সম্পাদনা করুন ।
এক ফাইলে শিরোনাম এবং প্রতিক্রিয়াটির পেডলোডকে একটি আলাদা ফাইলে ডাম্প করুন
curl -k -v -u user:pass "url" --trace-ascii headers.txt >> response.txt
curl -s -v -o / dev / null -H "টেস্টহেডার: পরীক্ষা" http://www.example.com
আপনি -I
যদি একটি প্রধান অনুরোধ প্রেরণ করতে চান এবং জিইটি অনুরোধটি না চান তবে আপনি বিকল্পটিও ব্যবহার করতে পারেন।
কুকিজ অন্তর্ভুক্ত পোস্ট কোয়েরি করতে এখানে 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);
/// DEBUG তথ্য প্রতিধ্বনি $ প্রতিক্রিয়া; 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
আপনি এটি ব্যবহার করে দেখতে পারেন -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
যে কোনও নেটওয়ার্ক ট্র্যাফিক (HTTP- র) দেখার জন্য আপনি ওয়্যারশার্ক বা tcpdump ব্যবহার করতে পারেন ।
Https://http-tools.appspot.com/reflect-http-request/some-unique-id এ একটি নমুনা অনুরোধ করুন এবং তার অনুরোধকারী অনুসন্ধানী url https দ্বারা এই অনুরোধটিতে (অনুরোধ শিরোনাম, অনুরোধের শরীর, অনুরোধের পরামিতি) কী রয়েছে তা যাচাই করুন : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id । এর পরিবর্তে আপনি যে কোনও স্ট্রিং ব্যবহার করতে পারেন some-unique-id
, আরও তথ্যের জন্য https://http-tools.appspot.com দেখুন।