পিএইচপি সিআরএল এইচটিটিপি কোড ফিরে 0


97

আমি যখন প্রতিধ্বনিত করি তখন বুঝতে পারি না $ httpCode আমি সর্বদা 0 পাই, যখন আমি broken html_brand কে একটি ভাঙা url তে পরিবর্তন করি তখন আমি 404 আশা করি। এমন কিছু আছে যা আমি মিস করছি বা জানি না? ধন্যবাদ

 //check if url exist
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $html_brand);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 404) {
    echo "The Web Page Cannot Be Found";
    return;
}
curl_close($ch);

উত্তর:


96

আপনি যদি সার্ভারের সাথে সংযোগ স্থাপন করেন, তবে আপনি এটি থেকে একটি রিটার্ন কোড পেতে পারেন, অন্যথায় এটি ব্যর্থ হবে এবং আপনি একটি 0 পাবেন So তাই আপনি যদি "www.google.com/lksdfk" সাথে সংযোগ করার চেষ্টা করেন তবে আপনি একটি রিটার্ন কোড পাবেন ৪০০, আপনি যদি সরাসরি গুগল.কম এ যান, আপনি 302 পাবেন (এবং তারপরে 200 আপনি যদি পরবর্তী পৃষ্ঠায় ফরোয়ার্ড করেন ... তবে আমি এটি করি কারণ এটি google.com.br এ ফরোয়ার্ড করে, তাই আপনি এটি নাও পেতে পারেন), এবং যদি আপনি "গুগলিকম" এ যান তবে আপনি একটি 0 পাবেন (হোস্ট পাওয়া যায়নি), তাই শেষেরটির সাথে, কোডটি ফেরত পাঠানোর মতো কেউ নেই।

নীচের কোডটি ব্যবহার করে পরীক্ষিত।

<?php

$html_brand = "www.google.com";
$ch = curl_init();

$options = array(
    CURLOPT_URL            => $html_brand,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_AUTOREFERER    => true,
    CURLOPT_CONNECTTIMEOUT => 120,
    CURLOPT_TIMEOUT        => 120,
    CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array( $ch, $options );
$response = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ( $httpCode != 200 ){
    echo "Return code is {$httpCode} \n"
        .curl_error($ch);
} else {
    echo "<pre>".htmlspecialchars($response)."</pre>";
}

curl_close($ch);

4
ফলোলোকেশনকেও রেফেন্সিংয়ের জন্য THX, কখনও কখনও আমি 301 পাই যা একটি পুনঃনির্দেশিত সমস্যা।
আরডিয়াস

যদিও এর অদ্ভুত $ প্রতিক্রিয়াতে এইচটিএমএল সামগ্রী রয়েছে তবে $ httpcode সর্বদা 0 ফেরত দেয়, এবং কার্ল_রর নাল is কি সম্ভব ভুল হতে পারে। আমি কেবলমাত্র সেটিংয়ে ফিরতি স্থানান্তরকারী, শিরোনাম (মিথ্যা), অনুসরণমূলক স্থান অন্তর্ভুক্ত করি।
আরদেয়াস

কেবল যোগ করতে, ইউআরএল এর আগে বা পরে যদি কোনও শ্বেত স্পেস থাকে তবে এটি http_code = 0
রাজা আমের খান খান


82

সমস্যা কী তা দেখার জন্য curl_exec এর পরে এটি ব্যবহার করে দেখুন:

print curl_error($ch);

যদি এটি 'ত্রুটিযুক্ত' জাতীয় কিছু মুদ্রিত হয় তবে আপনার URL বিন্যাসটি পরীক্ষা করুন।


5
এই পরামর্শের জন্য ধন্যবাদ - আমার বাট সংরক্ষণ করেছে :)
wbj

হ্যাঁ! আমার পাছা বাঁচিয়েছে।
পিএম


2

যেমনটি এখানে এবং নীচে বলা হয়েছে , একটি ব্যর্থ অনুরোধ ( যেমন সার্ভারটি পাওয়া যায় না ) মিথ্যা দেয়, কোনও HTTP স্থিতি কোড নেই, যেহেতু কোনও উত্তর কখনও পাওয়া যায়নি।

কল করুন curl_error()


2

আমার একই সমস্যা ছিল এবং আমার ক্ষেত্রে এটি ছিল কারণ কার্ল_এক্সেক ফাংশনটি php.ini এ অক্ষম। লগগুলির জন্য পরীক্ষা করুন:

PHP Warning:  curl_exec() has been disabled for security reasons in /var/www/***/html/test.php on line 18

সমাধানটি সার্ভার কনফিগারেশন ফাইলের php.ini- এ অক্ষম ফাংশনগুলি থেকে curl_exec সরান।


1

আপনি contents এইচটিএমএল_ব্র্যান্ডে যাচ্ছেন ঠিক কী সামগ্রীগুলি?

যদি এটিতে একটি অবৈধ ইউআরএল সিনট্যাক্স থাকে তবে আপনি খুব সম্ভবত এইচটিটিপি কোড 0 পাবেন।


1

এটা চেষ্টা কর:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

4
কোনও পুরানো প্রশ্নের উত্তর যখন কোনও গৃহীত উত্তরের সাথে দেওয়া হয় তখন আপনার উত্তরটির প্রশ্নের কোন নতুন দিকটি সম্বোধন করে তা উল্লেখ করা গুরুত্বপূর্ণ। এছাড়াও কেবলমাত্র উত্তরগুলি কীভাবে এবং কেন তারা কাজ করে তার কিছু ব্যাখ্যা যুক্ত করে সাধারণত উন্নত করা যায়। এছাড়াও কেউ সুরক্ষা অক্ষম করার পরামর্শ দেওয়ার সময় কেন এবং কী কী ঝুঁকি রয়েছে তা ব্যাখ্যা করা খুব গুরুত্বপূর্ণ।
জেসন অ্যালার

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ডোনাল্ড ডাক 16

0

পিএইচপি-র এইচটিপি কোড 0 ফেরত দেওয়ার জন্য আরেকটি কারণ সময়সীমা শেষ। আমার ক্ষেত্রে, আমি নিম্নলিখিত কনফিগারেশন ছিল:

curl_setopt ($ http, CURLOPT_TIMEOUT_MS, 500);

এটি প্রমাণিত হয়েছে যে আমি শেষ পয়েন্টটির দিকে অনুরোধ করেছি যা সর্বদা 500 এমএসেরও বেশি সময় নিয়ে যায়, সর্বদা সময়সীমার এবং সর্বদা HTTP কোড 0 ফিরে আসে।

আপনি যদি এই সেটিংটি মুছে ফেলেন (CURLOPT_TIMEOUT_MS) বা উচ্চতর মান রাখেন (আমার ক্ষেত্রে 5000), আপনি আমার ক্ষেত্রে 200 টি (আশানুরূপ হিসাবে) আসল http কোড পাবেন।

Https://www.php.net/manual/en/function.curl-setopt.php দেখুন


0

আপনি যদি সেলিনাক্স ব্যবহার করছেন তবে এটি সুরক্ষা বিধিনিষেধের কারণ হতে পারে। এটিকে মূল হিসাবে সেট করার চেষ্টা করুন:

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