一、什么是pythoncurl?
pycurl是curl库的一个Python接口,它可以利用libcurl实现高速网络下载,同时支持HTTP、HTTPS、FTP、GOPHER、TELNET、DICT和FILE,支持SSL、证书、HTTP POST、HTTP PUT、HTTP DELETE、HTTP HEAD、FTP上传等功能、HTTP代理,SOCKS代理等代理功能。
从功能上来讲,curl是一个命令行工具,curl库则是可以在程序里面调用的一系列函数,pycurl则是一个对curl库的Python封装,可以让Python程序方便而直接地调用curl,实现HTTP/HTTPS/FTP等多个协议下载等上传操作。
二、pythoncurl命令
1. pycurl.Curl()方法
常规的使用方法是通过创建Curl对象获取网络资源。
``` import pycurl import sys storage = sys.stdout c = pycurl.Curl() c.setopt(c.URL, 'http://www.example.com/') c.setopt(c.WRITEDATA, storage) c.perform() c.close() ```
2. pycurl.CurlMulti()
pycurl.CurlMulti()用法类似于pycurl.Curl()的get请求,但是它可以同时处理多个请求,是一个并发网络请求工具。
``` import pycurl m = pycurl.CurlMulti() # URL urls = ['http://www.baidu.com', 'http://www.163.com', 'http://www.sina.com.cn', 'http://www.qq.com', 'http://www.taobao.com'] # 遍历添加请求 for url in urls: c = pycurl.Curl() c.setopt(pycurl.URL, url) c.setopt(pycurl.CONNECTTIMEOUT, 30) c.setopt(pycurl.TIMEOUT, 30) c.setopt(pycurl.NOPROGRESS, 1) c.setopt(pycurl.FORBID_REUSE, 1) c.setopt(pycurl.MAXREDIRS, 1) c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30) c.setopt(pycurl.URL, url) m.add_handle(c) # 执行并行下载 while 1: ret, num_handles = m.perform() if ret != pycurl.E_CALL_MULTI_PERFORM: break pass # 阻塞应用直到所有访问完成 while num_handles: apply(select.select, tuple(sockets)) ret, num_handles = m.perform() pass ```
3. pycurl.FormWriter()
pycurl.FormWriter()函数用于多字符集间的文件上传
``` import pycurl c = pycurl.Curl() c.setopt(pycurl.URL, 'http://www.example.com/handlepost.cgi') c.setopt(pycurl.HTTPPOST, [("fileupload", pycurl.FORM_FILE, "upload.xml",pucrl.FORM_FILENAME,"上传数据.xml", pycurl.FORM_CONTENTTYPE,"text/xml"),]) c.perform() ```
三、pycurl常见的附加参数
1. CURLOPT_URL / CURLOPT_PORT :设置访问的URL和端口
这两个参数用来指定访问的URL或端口。
``` c.setopt(pycurl.URL, "http://www.example.com/page1.html") c.setopt(pycurl.PORT, 80) ```
2. CURLOPT_POSTFIELDS / CURLOPT_POSTFIELDSIZE:设置POST请求中要传送的数据
这两个参数用来发送POST数据,可以将文件和字符串发送到指定的URL地址上。
``` data = {'x': 123, 'y': 456} post_data = urlencode(data) c.setopt(c.POSTFIELDS, post_data) ```
3. CURLOPT_HTTPHEADER:设置HTTP头
参数可以设置HTTP头,以行的形式传递一个标签头列表和一个值列表。每个值存储在curl的内部缓冲区中,直到发送请求。
``` headers = ["Content-Type: application/json", "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)"] c.setopt(c.HTTPHEADER, headers) ```
4. CURLOPT_SSL_VERIFYPEER:设置是否验整个证书链
CURLOPT_SSL_VERIFYPEER用于设置SSL证书的验证方式,可设置为True和False,代表验证整个证书链和服务器证书,True需要检查服务器证书是否存在,并检查证书链,False不检查证书。
``` c.setopt(c.SSL_VERIFYPEER, False) ```
5. CURLOPT_PROXY:设置代理服务器地址
如果想使用代理服务器访问,可以使用CURLOPT_PROXY设置代理服务器地址。
``` c.setopt(c.PROXY, 'http://proxy.example.com:8888/') ```
四、总结
pythoncurl在Python程序开发和数据采集过程中应用非常广泛,其丰富的命令选项和附加参数可以帮助Python程序开发者轻松地实现各种请求和数据采集操作。
原创文章,作者:DJGQA,如若转载,请注明出处:https://www.506064.com/n/368319.html