一、什麼是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/zh-tw/n/368319.html