检查指向图像的URL是否为up并存在于Python中

2024-05-17 04:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个网站。我想从服务器上检查用户提交的链接是否是一个实际存在的图像。


Tags: 图像服务器网站链接检查用户
3条回答

看看imghdr

下面是一些示例代码:

import imghdr
import httplib
import cStringIO

conn = httplib.HTTPConnection('www.ovguide.com', timeout=60)
path = '/img/global/ovg_logo.png'
conn.request('GET', path)
r1 = conn.getresponse()

image_file_obj = cStringIO.StringIO(r1.read())
what_type = imghdr.what(image_file_obj)

print what_type

这应该返回“png”。如果不是图像,则不返回

希望能有帮助!

-布莱克

这是一种快速的方法:

它并不真正验证这是一个真正的图像文件,它只是根据文件扩展名猜测,然后检查url是否存在。如果您真的需要验证从url返回的数据实际上是一个图像(出于安全原因),那么这个解决方案将不起作用。

import mimetypes, urllib2

def is_url_image(url):    
    mimetype,encoding = mimetypes.guess_type(url)
    return (mimetype and mimetype.startswith('image'))

def check_url(url):
    """Returns True if the url returns a response code between 200-300,
       otherwise return False.
    """
    try:
        headers = {
            "Range": "bytes=0-10",
            "User-Agent": "MyTestAgent",
            "Accept": "*/*"
        }

        req = urllib2.Request(url, headers=headers)
        response = urllib2.urlopen(req)
        return response.code in range(200, 209)
    except Exception:
        return False

def is_image_and_ready(url):
    return is_url_image(url) and check_url(url)

这是适用于我的应用程序的最佳方法,也是基于以前的评论:

def is_url_image(image_url):
   image_formats = ("image/png", "image/jpeg", "image/jpg")
   r = requests.head(image_url)
   if r.headers["content-type"] in image_formats:
      return True
   return False

相关问题 更多 >