本帖最后由 一只学编程的鱼 于 2023-1-5 10:22 编辑
引言
之前我们说过,事实上,如果直接打印出urlopen()函数返回的结果,那么返回的是一个HTTPResponse类型的对象,我们之前只介绍了其中一个方法,即read()方法,今天我们来说一说这个对象的其他属性和方法(部分),而urlopen()函数也不止有url这个参数,我们顺便把这个也给说
HTTPResponse对象的其他属性及方法(部分)
第一个是status属性,用于返回所指定url的状态码,大家都知道,网址是状态码如果是200则为正常,404就是打不开也就是异常,那么我们话不多说,直接实战:
让我们来看看输出的结果吧:
可以看到,确实输出了状态码:200,即为正常。接下来就是getheaders()方法和getheader()方法,哎哎哎,先别打我,仔细看,这两个方法不一样,一个带s,一个不带,有什么区别吗?当然有,想想在英语上,名词带s表明什么,复数,那么就很明了了,把这个方法名拆开,get,headers,没错,获取响应头,我们直接实战一波:
仔细观察输出结果,这确实是响应头:
那么那个不加s的是干啥用的,这很简单,他有一个参数,这个参数是响应头中的一个键,其结果返回这个键对应的值,是不是有点懵?老规矩,上例子:
那么在这里我们可以获取响应头中的Server的值,我们来看看是否果真如此:
对比之前的结果,嗯,这确实是Server的值,这下大家就明白了吧。
urlopen()函数的其他参数
首先就是data参数了,这是可选的,这个参数必须是字节流编码格式,即bytes格式,可以用bytes()函数转换,如果添加了这个参数,那么请求的方式就会变为POST,我们这里拿一个专供测试HTTP请求的网站举个栗子:
可以看到,我们传入的参数是{"Hello":"world"},这是一个字典,我们需要用的urllib.parse库中的urlencode进行转换(转换为字符串),第二个参数是指定格式的,这里我们选择utf-8,这个网站可以输出请求的一些信息,我们来看一看:
可以看到,我们的参数成功的被提交到了from字段中。
那么接下来就是第二个参数,timeout参数,可以规定超出响应的时间,举个栗子:
那么在这里,我们设置了timeout参数为0.001即0.001秒,由于一般来说,没有网站可以在0.001秒内响应,所以抛出了错误:
我们可以配合urllib.error这个第三方库来处理这些异常:
那么在这里呢,我们先捕获了URLError错误,将它命名为e,接着用isinstance()函数配合socket这个第三方库判断出异常类型为timeout即超时异常,打印出“您的网页超时了”的字样,老样子,一般来说,没有网页可以在0.001秒内响应,所以,不出意料:
那么在实际应用中呢,我们可以使用这个参数来跳过那些长时间不响应的网站。
最后是几个比较不常用的参数,我就一笔带过了:
context参数:必须是ssl.SSLContext类型,用于指定SSL设置。
cafile参数:指定CA证书
capath参数:指定这个证书的路径
这两个呢在请求HTTP链接时将会用到。
cadefault参数:这个参数就不多说了,现在已经弃用了,默认值为False。
好了,以上就是今天的全部内容了,有什么建议和意见都可以告诉我,本人技术有限,再加上本就是自学,难免会有错误的地方,欢迎大佬们指出,最后,如果只是引用一小部分倒不用告诉我,如果是引用很多或搬运请务必私聊我并标明出处,谢谢,我是一只学编程的鱼,我们下期再见,拜拜。
谢谢
使用道具 举报
点评
使用道具
点评
使用道具 举报
???
使用道具 举报
谢谢
使用道具 举报
点评
使用道具 举报
谢谢了
使用道具 举报
点评
使用道具 举报