this thread में @Geoffrey उत्कृष्ट जवाब पर रेखाचित्र ...
इस सूत्र की पेशकश की अन्य समाधान के कुछ नहीं इस सही ढंग से कर रहे हैं। जब CURLOPT_FOLLOWLOCATION
या जब सर्वर एक 100 कोड के साथ प्रतिक्रिया पर है \r\n\r\n
पर
- विभाजन विश्वसनीय नहीं है।
CURLINFO_HEADER_SIZE
के माध्यम से हेडर के आकार का पता लगाना हमेशा विश्वसनीय नहीं होता है, खासकर जब प्रॉक्सी का उपयोग किया जाता है या कुछ पुनर्निर्देशन परिदृश्यों में होता है।
हेडर प्राप्त करने का सबसे विश्वसनीय तरीका CURLOPT_HEADERFUNCTION
का उपयोग कर रहा है। फिर आप curl_setopt($ch, CURLOPT_HEADER, 1);
हटा सकते हैं और आपका शरीर कोई हेडर नहीं रखेगा।
यहां PHP बंद करने का उपयोग करके इसे करने का एक बहुत ही साफ तरीका है। यह सर्वर और HTTP संस्करणों में लगातार हैंडलिंग के लिए सभी शीर्षकों को लोअरकेस में परिवर्तित करता है।
$ch = curl_init();
$headers = [];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Run the following function for each header received
// Note: Does NOT handle multiple instances of the same header. Later one will overwrite.
// Consider handling that scenario if you need it.
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function($curl, $header) use (&$headers) {
$len = strlen($header);
$header = explode(':', $header, 2);
if (count($header) >= 2)
$headers[strtolower(trim($header[0]))] = trim($header[1]);
return $len;
});
$data = curl_exec($ch);
print_r($headers);
स्रोत
2017-06-09 07:11:43
यह HTTP/1.1 में विफल रहता है। 100 शीर्षलेख मौजूद हैं। – sivann
आप 'curl_setopt ($ ch, CURLOPT_HTTPHEADER, सरणी (' अपेक्षा: ') के साथ जारी-शीर्षलेख को हटा सकते हैं); '। –
यह तब भी अमान्य है जब CURLOPT_FOLLOWLOCATION का उपयोग किया जाता है और 301 या 302 रीडायरेक्ट वाला पता प्राप्त किया जाता है। –