zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    数组作为方法参数时的一些意外情况
    pack://application:,,,/
    WPF 使用WinForm Chart控件
    WPF 后台绑定样式
    在转换为 UTC 时大于 DateTime.MaxValue 或小于 DateTime.MinValue 的 DateTime 值无法系列化为 JSON
    LINQ_to_SQL语法及实例大全
    C#编码好习惯,献给所有热爱c#的同学
    C#中OpenFileDialog的使用
    NET 2.0(C#)调用ffmpeg处理视频的方法
    SQLite Mysql 模糊查找(like)
  • 原文地址:https://www.cnblogs.com/albzcj/p/4208777.html
Copyright © 2011-2022 走看看