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