पायथन में, मैं यह देखने के लिए urlib का उपयोग कैसे करूं कि कोई वेबसाइट 404 या 200 है?


जवाबों:


176

गेटकोड () विधि (python2.6 में जोड़ा गया) HTTP स्थिति कोड देता है जो प्रतिक्रिया के साथ भेजा गया था, या यदि कोई URL URL नहीं है तो कोई भी नहीं।

>>> a=urllib.urlopen('http://www.google.com/asdfsf')
>>> a.getcode()
404
>>> a=urllib.urlopen('http://www.google.com/')
>>> a.getcode()
200

अजगर 3 में उपयोग करने के लिए, बस का उपयोग करें from urllib.request import urlopen
नेथनेल फ़ार्ले

4
अजगर 3.4 में, यदि 404 है, तो urllib.request.urlopenरिटर्न देता है urllib.error.HTTPError
एमसीबी

अजगर 2.7 में काम नहीं करता है। यदि HTTP 400 देता है, तो एक अपवाद फेंक दिया जाता है
नादव बी

86

आप urllib2 का उपयोग कर सकते हैं :

import urllib2

req = urllib2.Request('http://www.python.org/fish.html')
try:
    resp = urllib2.urlopen(req)
except urllib2.HTTPError as e:
    if e.code == 404:
        # do something...
    else:
        # ...
except urllib2.URLError as e:
    # Not an HTTP-specific error (e.g. connection refused)
    # ...
else:
    # 200
    body = resp.read()

ध्यान दें कि जो HTTP स्थिति कोड संग्रहीत करता है, उसका HTTPErrorउपवर्ग है URLError


क्या दूसरी elseगलती है?
सामी बेनचरिफ़

@NadavB अपवाद ऑब्जेक्ट 'e' एक प्रतिक्रिया ऑब्जेक्ट की तरह दिखेगा। यानी यह फ़ाइल की तरह है और आप इससे पेलोड को 'पढ़' सकते हैं।
जो होलोवे

37

पायथन 3 के लिए:

import urllib.request, urllib.error

url = 'http://www.google.com/asdfsf'
try:
    conn = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
    # Return code error (e.g. 404, 501, ...)
    # ...
    print('HTTPError: {}'.format(e.code))
except urllib.error.URLError as e:
    # Not an HTTP-specific error (e.g. connection refused)
    # ...
    print('URLError: {}'.format(e.reason))
else:
    # 200
    # ...
    print('good')

के लिए URLError print(e.reason) इस्तेमाल किया जा सकता।
Gitnik

किस बारे में http.client.HTTPException?
CMCDragonkai

6
import urllib2

try:
    fileHandle = urllib2.urlopen('http://www.python.org/fish.html')
    data = fileHandle.read()
    fileHandle.close()
except urllib2.URLError, e:
    print 'you got an error with the code', e

5
TIMEX http अनुरोध कोड (200, 404, 500, आदि) को हथियाने में रुचि रखता है, urllib2 द्वारा डाली गई एक सामान्य त्रुटि नहीं है।
यहोशू बर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.