Python 模块 urllib.request

Python 模块 urllib.request

Python 模块 urllib.request 提供了对网络资源的访问,内置支持协议 HTTP(S),FTP和访问本地文件系统,还可以创建新的协议类型或者为现有的协议添加新变量。

HTTP GET


HTTP GET 操作用于获取服务器的内容,通常服务器会根据 URL 来确定返回的内容。使用模块 urllib.request 的 urlopen() 方法,返回类似于文件 API 的一个对象,可以通过它的 read() 方法获取服务器的内容。

首先使用 Python 内置的 http.server 模块创建一个简单的 HTTP 服务器。

Python 模块 urllib.request

执行:

Python 模块 urllib.request

上面绑定本地端口 8080,服务器开启后,就可以接收请求了。可以使用浏览器或者使用 curl 查看一下服务器的输出内容。

Python 模块 urllib.request

只是简单的输出一个字符串 hello from server。

下面使用模块 urllib.request 请求上面创建的 HTTP 服务器。

Python 模块 urllib.request

执行:

Python 模块 urllib.request

上例中,使用 urlopen() 方法发起 HTTP GET 请求,返回一个类似文件接口的对象。可以使用 read() 或者 readlines() 方法读取服务器返回的内容。使用 info() 方法返回服务器的头信息。

GET 请求添加参数


可以在链接 URL 添加参数传递给服务器,格式是在 URL 后面添加问号 ?,问号后面跟着一个或多个参数和值,例如 '?a=1&b=2' ,参数键和值使用等号 = 分隔,多个参数使用 & 分隔。

GET 请求的 URL 的参数是有长度限制的,不能超过 2048 个字节。

参数需要使用模块 urllib.parse 进行编码,它会转换一些特殊字符,防止和 URL 的格式冲突,例如 urlencode() 把一个字典转换成 URL 的格式,默认会把空格替换为 +,斜线 / 替换为 %2F。

Python 模块 urllib.request

执行:

Python 模块 urllib.request

HTTP POST


要发送一个使用表单编码的数据到服务器,就要使用 HTTP 的 POST 方法了,POST 和 GET 方法的区别就是 POST 方法体现的是我要更改服务器上的某些设定,例如更新数据库的某个字段,并且理论上 POST 要发送的数据大小是没有限制的。

下面创建一个 HTTP 服务器,返回用户 POST 请求的值。

Python 模块 urllib.request

开启服务器:

Python 模块 urllib.request

先使用 curl 请求一个数据试试:

curl -X POST --data 'foo=1&p=2' http://localhost:8080

p=2

foo=1

可见,传入到服务器的 POST 值都返回了,下面使用 urllib.request 发起请求。

Python 模块 urllib.request

执行:

Python 模块 urllib.request

添加额外的请求头 Headers


方法 urlopen() 为我们提供了便利,同时也隐藏了一些细节。为了定制一个请求对象,例如添加特定的请求头,可以自己构造一个 Request 实例,把我们的请求头添加到实例上,然后调用请求方法。

Python 模块 urllib.request

执行:

Python 模块 urllib.request

构造 Request 实例时,可以通过 data 参数构造 POST 请求参数。此时请求方法就变为 POST 方法。

Python 模块 urllib.request

执行:

Python 模块 urllib.request


分享到:


相關文章: