কার্ল ব্যবহার করে পিএইচপি তে এইচটিটিপি কোড প্রাপ্ত


177

আমি কোনও সাইটের স্ট্যাটাস পেতে সিআরএল ব্যবহার করছি, যদি এটি উপরে / ডাউন হয় বা অন্য কোনও সাইটে পুনঃনির্দেশিত হয়। আমি এটি যথাসম্ভব প্রবাহিত করতে চাই, তবে এটি ভালভাবে কাজ করছে না।

<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

return $httpcode;
?>

আমি এই একটি ফাংশন আবৃত আছে। এটি দুর্দান্ত কাজ করে তবে কার্য সম্পাদন সর্বোত্তম নয় কারণ এটি পুরো পৃষ্ঠাটি ডাউনলোড করে, যদি আমি $output = curl_exec($ch);এটি সরিয়ে দিই তবে 0সমস্ত সময় ফিরে আসে ।

পারফরম্যান্স আরও কীভাবে করা যায় কেউ জানেন?

উত্তর:


260

প্রথমে নিশ্চিত হয়ে নিন যে ইউআরএলটি আসলে বৈধ কিনা (একটি স্ট্রিং, খালি নয়, ভাল সিনট্যাক্স), এটি সার্ভারের দিকটি দ্রুত পরীক্ষা করা উচিত। উদাহরণস্বরূপ, প্রথমে এটি করা অনেক সময় সাশ্রয় করতে পারে:

if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
    return false;
}

আপনি কেবল শিরোনাম আনছেন তা নিশ্চিত করুন, শরীরের সামগ্রী নয়:

@curl_setopt($ch, CURLOPT_HEADER  , true);  // we want headers
@curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body

ইউআরএল স্থিতি HTTP কোড পাওয়ার বিষয়ে আরও তথ্যের জন্য আমি তৈরি করা অন্য পোস্টের কথা উল্লেখ করি (এটি নিম্নলিখিত পুনঃনির্দেশগুলির সাথেও সহায়তা করে):


সার্বিকভাবে:

$url = 'http://www.example.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt($ch, CURLOPT_NOBODY, true);    // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo 'HTTP code: ' . $httpcode;

4
আমি আপনার পোস্ট সম্পাদনা করেছি এবং পুরো উদাহরণস্বরূপ কার্য কোডটি পেস্ট করেছি। আমি এটিকে আরও সহায়ক বলে মনে করি। বিটিডব্লু।, CURLOPT_HEADER এবং CURLOPT_NOBODY সেটিংস উল্লেখ করার জন্য +1! :)
Sk8erPeter

25
এটি সত্য হিসাবে CURLOPT_HEADER সেট করা প্রয়োজন হয় না। আপনি এখনও কার্ল_জেটিনফো () থেকে যে কোনও উপায়েই httpcode পান।
ব্রেইনওয়্যার

7
পিএইচপি ৫.৫.০ এবং সিআরএল 7..১০.৮ অনুসারে, এই [CURLINFO_HTTP_CODE] হ'ল CURLINFO_RESPONSE_CODE ( রেফ ) এর উত্তরাধিকারী উপন্যাস
32-

কোনও কারণে এই লাইনটি curl_setopt($ch, CURLOPT_NOBODY, true);ঝুলছে। এটি সার্ভারের পিএইচপি সংস্করণের সাথে সম্পর্কিত কিনা তা নিশ্চিত নয়।
আইটোকটপাস

126
// must set $url first....
$http = curl_init($url);
// do your curl thing here
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
echo $http_status;

16
এটি প্রশ্নের সর্বাধিক প্রত্যক্ষ উত্তর
এনিগমা প্লাস

6
এটির জন্য শরীরকে উপেক্ষা করার প্রয়োজন হয় না এবং কেবলমাত্র একটি কল করে, এটি আমার পছন্দসই উত্তরটিও করে।
মাইক_কে

24
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$rt = curl_exec($ch);
$info = curl_getinfo($ch);
echo $info["http_code"];

1
আপনি একটি প্রকার তৈরি করেছেন, এটি প্রতিধ্বনি $ তথ্য হওয়া উচিত ["http_code"]; প্রতিধ্বনির পরিবর্তে তথ্য [তথ্য ["HTTP_code];
লুডো - রেকর্ড বন্ধ


4

curl_getinfo - একটি নির্দিষ্ট স্থানান্তর সম্পর্কিত তথ্য পান

Curl_getinfo পরীক্ষা করুন

<?php
// Create a curl handle
$ch = curl_init('http://www.yahoo.com/');

// Execute
curl_exec($ch);

// Check if any error occurred
if(!curl_errno($ch))
{
 $info = curl_getinfo($ch);

 echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}

// Close handle
curl_close($ch);

2

curl_execপ্রয়োজনীয়। CURLOPT_NOBODYদেহটি ডাউনলোড না করার চেষ্টা করুন । এটি আরও দ্রুত হতে পারে।


0

function getStatusCode()
{
    $url = 'example.com/test';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
    curl_setopt($ch, CURLOPT_NOBODY, true);    // we don't need body
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT,10);
    $output = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return  $httpcode;
}
print_r(getStatusCode());

0

সকল ধরণের এপিআই প্রতিক্রিয়া আনার জন্য এই পোস্টটি হিট করল পদ্ধতিটি ব্যবহার করুন অর্থাৎ গেট / পোস্ট করুন

        function hitCurl($url,$param = [],$type = 'POST'){
        $ch = curl_init();
        if(strtoupper($type) == 'GET'){
            $param = http_build_query((array)$param);
            $url = "{$url}?{$param}";
        }else{
            curl_setopt_array($ch,[
                CURLOPT_POST => (strtoupper($type) == 'POST'),
                CURLOPT_POSTFIELDS => (array)$param,
            ]);
        }
        curl_setopt_array($ch,[
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
        ]);
        $resp = curl_exec($ch);
        $statusCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
        curl_close($ch);
        return [
            'statusCode' => $statusCode,
            'resp' => $resp
        ];
    }

এপিআই পরীক্ষার জন্য ডেমো ফাংশন

 function fetchApiData(){
        $url = 'https://postman-echo.com/get';
        $resp = $this->hitCurl($url,[
            'foo1'=>'bar1',
            'foo2'=>'bar2'
        ],'get');
        $apiData = "Getting header code {$resp['statusCode']}";
        if($resp['statusCode'] == 200){
            $apiData = json_decode($resp['resp']);
        }
        echo "<pre>";
        print_r ($apiData);
        echo "</pre>";
    }

-3

এখানে আমার সমাধানটি নিয়মিত সার্ভারের স্থিতি পরীক্ষা করার জন্য স্থিতি এইচটিটিপি পেতে হবে

$url = 'http://www.example.com'; // Your server link

while(true) {

    $strHeader = get_headers($url)[0];

    $statusCode = substr($strHeader, 9, 3 );

    if($statusCode != 200 ) {
        echo 'Server down.';
        // Send email 
    }
    else {
        echo 'oK';
    }

    sleep(30);
}

1
গেটহেডারগুলি কার্লের তুলনায় ধীরে ধীরে।
মাইক Kormentedy

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