web2py的网址验证(web2py url validator)

2019-07-31 00:08发布

在通过web2by我想先验证URL的,如果它不是有效的建立了一个缩短儿又回到第一页有错误消息。 这是我在控制器代码(MVC拱。),但我不明白什么是错的.. !!

import urllib

def index():
    return dict()

def random_maker():
    url = request.vars.url
    try:
        urllib.urlopen(url)
        return dict(rand_url = ''.join(random.choice(string.ascii_uppercase +
                    string.digits + string.ascii_lowercase) for x in range(6)),
                    input_url=url)
    except IOError:
        return index()

Answer 1:

使用httplib的你不能检查HTTP响应代码。 如果是200,则页面是有效的,如果是别的(如404)或错误,那么它是无效的。

看到这个问题: 什么是得到一个URL的HTTP响应代码的最佳方式?

更新:

基于您的评论,它看起来像你的问题是,你如何处理错误。 你只处理IO错误的问题。 你的情况,你可以处理所有的错误单独切换到:

except:
    return index()

您也可以通过重写http_default_error建立自己的异常处理程序。 请参阅如何赶上urllib.urlretrieve 404错误的详细信息。

或者你也可以切换到的urllib2它有特定的错误,然后您就可以搞定的urllib2抛出这样的具体错误:

from urllib2 import Request, urlopen, URLError
req = Request('http://jfvbhsjdfvbs.com')
try:
    response = urlopen(req)
except URLError, e:
    if hasattr(e, 'reason'):
        print 'We failed to reach a server.'
        print 'Reason: ', e.reason
    elif hasattr(e, 'code'):
        print 'The server couldn\'t fulfill the request.'
        print 'Error code: ', e.code
else:
    print 'URL is good!'

与上面的代码将返回:

We failed to reach a server.
Reason:  [Errno 61] Connection refused

每个异常类的细节都包含在了urllib.error API文档。

我不完全知道如何插槽该到你的代码,因为我不知道到底是什么你正在尝试做的,但IO错误是不会处理由urllib的抛出的异常。



文章来源: web2py url validator