geturl -- 这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象
使用的)或许会有重定向。获取的URL或许跟请求URL不同!
很多时候我们的程序会接收来自外部的数据,但是我们不能确保接收的数据是我们期待的数据,这时可能需要对数据进行一些验证。比如,在做接口测试时,我们发送http请求,会受到服务器的应答信息,这时需要对接收的数据进行检查,判断是否符合预期。
这里介绍一个简单的数据验证库 validators ,后续还会介绍其他的数据验证库。
python有很多数据验证工具,但是其他的数据验证工具都需要自己定义模式。validators是一个简单的数据验证库,当验证一个简单的值时,不需要定义一个表单或模式。
目前 validators 支持python版本2.7, 3.3, 3.4, 3.5 和PyPy
在validators中每一个validator是一个简单的函数,函数参数为要验证的值,一些函数可能有额外的关键字参数。对于每一个函数,如果验证成功,则返回 True ;若验证失败,则返回一个 ValidationFailure 对象。
验证一个数字 value 是否在最小值 min 和最大值 max 之间, value 不仅仅可以是整数,也可以是其它数据类型,例如floats, decimals 和 dates.
Parameters:
• min – The minimum required value of the number. If not provided, minimum value will not be checked.
• max – The maximum value of the number. If not provided, maximum value will not be checked.
验证 value 是否是一个有效域。如果 value 是一个有效域名,函数返回 True , 否则返回 ValidationFailure .
也支持国际化域名(IDN domain),例如:
验证是否是合法的邮件地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的国际银行账户号码,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的ipv4地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的ipv6地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证给定的字符串长度是否在指定范围内。
验证是否是合法的mac地址,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的slug,如果是,函数返回 True , 否则返回 ValidationFailure .
验证是否是合法的url,如果是,函数返回 True , 否则返回 ValidationFailure .
Parameters:
• value – 要验证的url
• public – (default=False) Set True to only allow a public IP address
验证Finnish Business ID.
验证Finnish Social Security Number.
class validators.utils.ValidationFailure(func, args)
validators.utils.validator(func, *args, **kwargs)
例:
控制台输出结果:
下一篇:Python数据验证库(二)validator
http://www.jianshu.com/p/eee56214af9c
因为工作需要,之前用python写了一些批量校验url有效性的小脚本,但并不全面,健壮性较差,现把之整理一下,代码如下:#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib2
from urllib2 import URLError
result_url=[]
count=0
not_200=0
f=open("img1.txt","r")
img_not_200=open("img_not_200.txt","w+")
for line in f:
count+=1
print "on scanning ",count
try:
response=urllib2.urlopen(line)
except URLError, e:
if hasattr(e,'reason'): #stands for URLError
print "can not reach a server,writing..."
result_url.append(line)
not_200+=1
img_not_200.write(line)
print "write url success!"
elif hasattr(e,'code'): #stand
对这段代码解析如下:
如果url有效,则可以正常通过urlopen取到response,并且response.getcode()等于200;
但若url无效,无论是无法找到服务器还是其他http错误,都无法通过urlopen返回response。这个时候,就需要通过返回的错误类型来判断错误到底是url错误还是http错误。上面的程序是通过错误类型所拥有的属性来判断的。如果错误类型有“code”属性,则代表错误是HTTPError;如果属性有“reason”,则代表是URLError错误。
当然,也可以在except中分别指定抛出的错误类型,进而进行不同的处理。所要注意的是,因为HTTPError是URLError的子类,所以必须在第一个except中指定捕获HTTPError,第二个except中指定捕获URLError,否则的话,你懂的。。
收藏