pycurl的使用方法get and post


轉自:http://www.xuebuyuan.com/743876.html

使用pycurl進行web提交

2012年10月10日 ⁄ 綜合 ⁄ 共 1850字 ⁄ 字號    ⁄ 評論關閉

之前使用python提交數據到服務器時都是采用自帶的urllib庫。前一段時間登錄某Cas系統時,總是莫名的失敗。失敗的原因好像是cookie的問題,各個頁面需要共享cookie。嘗試了多個給urllib設置cookie的方法,還是沒能成功。

后來,試了pycurl,竟然成功了,那就使用pycurl吧。(很抱歉,我沒能追查出為什么采用urllib2沒有成功,也沒有徹底研究出為何pycurl能夠成功)

pycurl官方下載鏈接我沒有打開,本人通過該鏈接下載。另外,本人使用的是python2.7。

首先,對pycurl進行簡單的封裝

 

def initCurl():
'''初始化一個pycurl對象,
盡管urllib2也支持 cookie 但是在登錄cas系統時總是失敗,並且沒有搞清楚失敗的原因。
這里采用pycurl主要是因為pycurl設置了cookie后,可以正常登錄Cas系統
'''
        c = pycurl.Curl()
        c.setopt(pycurl.COOKIEFILE, "cookie_file_name")#把cookie保存在該文件中
        c.setopt(pycurl.COOKIEJAR, "cookie_file_name")
        c.setopt(pycurl.FOLLOWLOCATION, 1) #允許跟蹤來源
        c.setopt(pycurl.MAXREDIRS, 5)
        #設置代理 如果有需要請去掉注釋,並設置合適的參數
        #c.setopt(pycurl.PROXY, ‘http://11.11.11.11:8080′)
        #c.setopt(pycurl.PROXYUSERPWD, ‘aaa:aaa’)
        return c

然后,封裝出HTTP中的兩個常用方法,GET和POST

def GetDate(curl, url):
'''獲得url指定的資源,這里采用了HTTP的GET方法
'''
        head = ['Accept:*/*',
                'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11']
        buf = StringIO.StringIO()
        curl.setopt(pycurl.WRITEFUNCTION, buf.write)
        curl.setopt(pycurl.URL, url)
        curl.setopt(pycurl.HTTPHEADER,  head)
        curl.perform()
        the_page =buf.getvalue()
        buf.close()
        return the_page
def PostData(curl, url, data):
'''提交數據到url,這里使用了HTTP的POST方法

備注,這里提交的數據為json數據,
如果需要修改數據類型,請修改head中的數據類型聲明
'''
        head = ['Accept:*/*',
                'Content-Type:application/xml',
                'render:json',
                'clientType:json',
                'Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3',
                'Accept-Encoding:gzip,deflate,sdch',
                'Accept-Language:zh-CN,zh;q=0.8',
                'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11']
        buf = StringIO.StringIO()
        curl.setopt(pycurl.WRITEFUNCTION, buf.write)
        curl.setopt(pycurl.POSTFIELDS,  data)
        curl.setopt(pycurl.URL, url)
        curl.setopt(pycurl.HTTPHEADER,  head)
        curl.perform()
        the_page = buf.getvalue()
        #print the_page
        buf.close()
        return the_page

當然,還需要一些引用

import pycurl
import StringIO
import urllib

好了,給出個例子

    c = initCurl()
    html = GetDate(c, 'http://www.baidu.com')
    print html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM