2008-11-07 6 views
6

मैं एक डीबी में 20,000 लिंक के माध्यम से जाने के लिए बैच स्क्रिप्ट बनाना चाहता हूं, और सभी 404 और इस तरह से बाहर निकलना चाहता हूं। रिमोट यूआरएल के लिए मुझे HTTP स्टेटस कोड कैसे मिलेगा?php में दूरस्थ डोमेन के लिए HTTP स्थिति कोड कैसे प्राप्त करते हैं?

अधिमानतः कर्ल का उपयोग नहीं कर रहा है, क्योंकि मैंने इसे इंस्टॉल नहीं किया है।

उत्तर

13

कर्ल सही होगा लेकिन चूंकि आपके पास यह नहीं है, इसलिए आपको सॉकेट के साथ नीचे उतरना और गंदा होना होगा। तकनीक है:

  1. सर्वर पर सॉकेट खोलें।
  2. एक HTTP HEAD अनुरोध भेजें।
  3. प्रतिक्रिया पार्स करें।

    <?php 
    
    $url = parse_url('http://www.example.com/index.html'); 
    
    $host = $url['host']; 
    $port = $url['port']; 
    $path = $url['path']; 
    $query = $url['query']; 
    if(!$port) 
        $port = 80; 
    
    $request = "HEAD $path?$query HTTP/1.1\r\n" 
          ."Host: $host\r\n" 
          ."Connection: close\r\n" 
          ."\r\n"; 
    
    $address = gethostbyname($host); 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    socket_connect($socket, $address, $port); 
    
    socket_write($socket, $request, strlen($request)); 
    
    $response = split(' ', socket_read($socket, 1024)); 
    
    print "<p>Response: ". $response[1] ."</p>\r\n"; 
    
    socket_close($socket); 
    
    ?> 
    

    अद्यतन:

यहां एक त्वरित उदाहरण है मैं यूआरएल

+0

मुझे विश्वास है कि है: । "मेजबान: $ मेजबान \ r \ n \" (यानी, नहीं% मेजबान) लेकिन तुलना में है कि अच्छी तरह से काम करेंगे अन्य। –

+0

उस शॉन को खोजने के लिए धन्यवाद। मैं उस छोटे टाइपो को सही कर दूंगा। –

+0

मुझे यह इंगित करना चाहिए कि सभी वेब सर्वर हेड अनुरोधों का समर्थन या सक्षम नहीं करते हैं, भले ही किसी को मारने का मौका शून्य के करीब है ... –

0

http://www.webmasterworld.com/forum88/12559.htm googling इस लिंक पाया की एक त्वरित बिट पार्स करने के लिए कुछ लाइनें जोड़ दिया है। सबसे अद्यतित संस्करण नीचे के पास है।

1

This page ऐसा लगता है कि यह कर्ल या fsockopen का उपयोग कर एक पेज डाउनलोड करने के लिए एक बहुत अच्छा सेटअप है, और HTTP हेडर या तो विधि (जो वास्तव में आप चाहते हैं) का उपयोग कर प्राप्त कर सकते हैं।

उस विधि का उपयोग करने के बाद, आप इच्छित डेटा प्राप्त करने के लिए $ आउटपुट ['info'] ['http_code'] जांचना चाहते हैं।

उम्मीद है कि मदद करता है।

2

तो im नहीं php बिल्ट-इन कार्य एक दूरस्थ यूआरएल की http स्थिति लौटने के लिए, तो सबसे अच्छा विकल्प सॉकेट उपयोग करने के लिए सर्वर से कनेक्शन खोलने के लिए हो सकता है, एक अनुरोध भेजने के लिए और पार्स की गलत कोई भी प्रतिक्रिया की स्थिति:

छद्म कोड:

parse url => $host, $port, $path 
$http_request = "GET $path HTTP/1.0\nHhost: $host\n\n"; 
$fp = fsockopen($host, $port, $errno, $errstr, $timeout), check for any errors 
fwrite($fp, $request) 
while (!feof($fp)) { 
    $headers .= fgets($fp, 4096); 
    $status = <parse $headers > 
    if (<status read>) 
    break; 
} 
fclose($fp) 

एक अन्य विकल्प एक पहले से ही php में http ग्राहक वर्ग है कि पूरे पृष्ठ का विषय-वस्तु आकर्षित बिना हेडर लौट सकते हैं का निर्माण का उपयोग करना है, कुछ खुला स्रोत होना चाहिए नेट पर उपलब्ध वर्ग ...

संबंधित मुद्दे