পিএইচপি - ডিবাগিং কার্ল


210

আমি অনুরোধের পোস্ট ক্ষেত্রগুলি প্রেরণের আগে তা দেখতে চাই। (ডিবাগিং উদ্দেশ্যে)

আমি যে পিএইচপি লাইব্রেরি (ক্লাস) ব্যবহার করছি তা ইতিমধ্যে তৈরি (আমার দ্বারা নয়), তাই আমি এটি বোঝার চেষ্টা করছি।

আমি যতদূর বলতে পারি, এটি curl_setopt()বিভিন্ন অপশন যেমন শিরোলেখ এবং এর মতো সেট করতে ব্যবহার করে এবং তারপরে এটি curl_exec()অনুরোধটি প্রেরণে ব্যবহার করে।

কী পোস্ট ফিল্ডগুলি পাঠানো হচ্ছে তা কীভাবে দেখুন?


উত্তর:


174

আপনি CURLOPT_VERBOSEবিকল্পটি সক্ষম করতে পারেন :

curl_setopt($curlhandle, CURLOPT_VERBOSE, true);

কখন CURLOPT_VERBOSEসেট করা হয়, এসটিডিআরআর বা নির্দিষ্ট ফাইল ব্যবহার করে আউটপুট লেখা হয় CURLOPT_STDERR। আউটপুট খুব তথ্যপূর্ণ।

আপনি নেটওয়ার্ক ট্র্যাফিক দেখতে tcpdump বা wireshark ব্যবহার করতে পারেন।


16
এটি লক্ষণীয় যে আপনি যদি সেট আপ CURLINFO_HEADER_OUTকরে থাকেন তবে এটি কাজ করবে না TRUE। যতদূর আমি বলতে পারি ...
মাইক

399

আপনি CURLOPT_VERBOSEবিকল্পটি সক্ষম করতে পারেন এবং সেই তথ্যটিকে একটি (অস্থায়ী) লগ করতে পারেন CURLOPT_STDERR:

// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR, 
// or the file specified using CURLOPT_STDERR.
curl_setopt($handle, CURLOPT_VERBOSE, true);

$verbose = fopen('php://temp', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);

কার্ল অনুরোধটি শেষ করার পরে আপনি এটি পড়তে পারেন:

$result = curl_exec($handle);
if ($result === FALSE) {
    printf("cUrl error (#%d): %s<br>\n", curl_errno($handle),
           htmlspecialchars(curl_error($handle)));
}

rewind($verbose);
$verboseLog = stream_get_contents($verbose);

echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";

(আমি মূলত অনুরূপ উত্তর দিয়েছি তবে সম্পর্কিত প্রশ্নে আরও বর্ধিত ))

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

$version = curl_version();
extract(curl_getinfo($handle));
$metrics = <<<EOD
URL....: $url
Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs)
Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime
Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time)
Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.)
Curl...: v{$version['version']}
EOD;


1
@ আইসিসারেল: আপনি ঠিক বলেছেন। সংশোধন। ইঙ্গিতটির জন্য ধন্যবাদ।
হ্যাক্রে

আপনি ডিবাগিংয়ে ঝাঁপ দেওয়ার আগে, তবে: কোনও ত্রুটি টস হওয়ার ক্ষেত্রে
অ্যাপাচি লগটি

59

এটির জন্য এখানে একটি সহজ কোড রয়েছে:

   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_STDERR, $fp);

যেখানে $ fp আউটপুট ত্রুটিগুলির একটি ফাইল হ্যান্ডেল। উদাহরণ স্বরূপ:

   $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');

( Http://curl.haxx.se/mail/curlphp-2008-03/0064.html এ পড়ুন )


আমি @ মাইকেল-আর- এর উত্তরটি ব্যবহার করতে পছন্দ করব তবে পিএইচপি লগতে আমি ভার্বোজ পাইনি। এই মত কাজ করে একটি নতুন ফাইলে লগ ইন।
জোনো

28

পিএইচপি ত্রুটি আউটপুটে সরাসরি লিখে এখানে একটি আরও সহজ উপায়

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));

21

কেবলমাত্র একটি সিআরএল অনুরোধের তথ্য পেতে এটি করুন:

$response = curl_exec($ch);

$info = curl_getinfo($ch);
var_dump($info);

প্রতিক্রিয়া "পরে" তার excelent curl_getinfo কিন্তু উদাহরণস্বরূপ বিকৃত URL গুলি getinfo আয় অ তথ্যের জন্য, অপ্ট তার একটি ভাল উদাহরণ CURLOPT_VERBOSE জন্য
girorme

1

আপনি যদি ফলাফলটি ডিবাগ করার জন্য খুব দ্রুত উপায় চান:

$ch = curl_init();
curl_exec($ch);
$curl_error = curl_error($ch);
echo "<script>console.log($curl_error);</script>"

0

আর একটি (অপরিশোধিত) বিকল্পটি হ'ল সম্পূর্ণ অনুরোধটি ডাম্প করার জন্য নেটক্যাট ব্যবহার করা:

nc -l -p 8000 -w 3 | tee curldbg.txt

এবং অবশ্যই এটিতে ব্যর্থ অনুরোধ পাঠানো:

curl_setup(CURLOPT_URL, "http://localhost/testytest");

উল্লেখযোগ্যভাবে এটি সর্বদা স্তব্ধ + ব্যর্থ হবে, যেহেতু নেটক্যাট কখনও বৈধ এইচটিটিপি প্রতিক্রিয়া তৈরি করে না। এটি আসলে যা পাঠানো হয়েছে তা খতিয়ে দেখার জন্য। আরও ভাল বিকল্পটি অবশ্যই একটি http অনুরোধ ডিবাগিং পরিষেবা ব্যবহার করছে ।


0

STDERR এ আউটপুট ডিবাগ তথ্য:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option
     */
    CURLOPT_VERBOSE => true,
]);

curl_exec($curlHandler);

curl_close($curlHandler);

ফাইলের আউটপুট ডিবাগ তথ্য:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option.
     */
    CURLOPT_VERBOSE => true,

    /**
     * Specify log file.
     * Make sure that the folder is writable.
     */
    CURLOPT_STDERR => fopen('./curl.log', 'w+'),
]);

curl_exec($curlHandler);

curl_close($curlHandler);

Https://github.com/andriichuk/php-curl-cookbook#debug-request দেখুন

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