Python PycURL 网络编程实例及自动处理Cookie详解

Python PycURL 网络编程实例

在使用urllib的时候经常会死掉,以前debug过,是没有设置 timing out 所以超时后就会死掉。
PycURL是curl的python库,虽然有些curl的功能没有实现,但是还是很强劲的。

curl是非常强劲的一个工具,
google内部用它来 debug GDATA API. Using cURL to interact with Google data services

可以去 http://pycurl.sourceforge.net/ 下载最新的PycURL。

简单的PycURL例子

import pycurl
import StringIO
 
url = "http://www.google.com/"
crl = pycurl.Curl()
crl.setopt(pycurl.VERBOSE,1)
crl.setopt(pycurl.FOLLOWLOCATION, 1)
crl.setopt(pycurl.MAXREDIRS, 5)
crl.fp = StringIO.StringIO()
crl.setopt(pycurl.URL, url)
crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
crl.perform()
print crl.fp.getvalue()

PycURL 自动处理cookie

import pycurl
import StringIO
 
url = "http://www.google.com/"
crl = pycurl.Curl()
crl.setopt(pycurl.VERBOSE,1)
crl.setopt(pycurl.FOLLOWLOCATION, 1)
crl.setopt(pycurl.MAXREDIRS, 5)
crl.fp = StringIO.StringIO()
crl.setopt(pycurl.URL, url)
crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
 
# Option -b/--cookie  Cookie string or file to read cookies from
# Note: must be a string, not a file object.
crl.setopt(pycurl.COOKIEFILE, "cookie_file_name")
 
# Option -c/--cookie-jar  Write cookies to this file after operation
# Note: must be a string, not a file object.
crl.setopt(pycurl.COOKIEJAR, "cookie_file_name")
 
crl.perform()
print crl.fp.getvalue()

PycURL 实现POST方法

import pycurl
import StringIO
import urllib
 
url = "http://www.google.com/"
post_data_dic = {"name":"value"}
crl = pycurl.Curl()
crl.setopt(pycurl.VERBOSE,1)
crl.setopt(pycurl.FOLLOWLOCATION, 1)
crl.setopt(pycurl.MAXREDIRS, 5)
#crl.setopt(pycurl.AUTOREFERER,1)
 
crl.setopt(pycurl.CONNECTTIMEOUT, 60)
crl.setopt(pycurl.TIMEOUT, 300)
#crl.setopt(pycurl.PROXY,proxy)
crl.setopt(pycurl.HTTPPROXYTUNNEL,1)
#crl.setopt(pycurl.NOSIGNAL, 1)
crl.fp = StringIO.StringIO()
crl.setopt(pycurl.USERAGENT, "dhgu hoho")
 
# Option -d/--data    HTTP POST data
crl.setopt(crl.POSTFIELDS,  urllib.urlencode(post_data_dic))
 
crl.setopt(pycurl.URL, url)
crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
crl.perform()
 
print crl.fp.getvalue()

urllib 超时设置

import socket
socket.setdefaulttimeout(5.0)

Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie

Python中的Cookie相关的库

Python中有自带的模块:cookielib

可以处理cookie相关的很多事情。

包括

    自动处理cookie:cookie数据是保存在内存中
    自动处理cookie:支持Cookie数据存放到文件中
        其中有两种格式:
            LWP
            Mozilla
        进一步,再支持:
            将cookie存到文件里面
            从文件中载入cookie

更多详细格式和解释,请直接看下面的代码。

 
Python中自动处理Cookie,将Cookie保存到文件,从文件中读取Cookie

Python代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Version:    2013-01-15
Author:     Crifan
Contact:    admin (at) crifan.com
"""
 
import os;
import cookielib;
import urllib2;
 
def pythonAutoHandleCookie():
    """
        Demo how to auto handle cookie in Python
            cookies in memory
            cookies in file:
                save cookie to file
                    LWP     format
                    Mozilla format
                load cookie from file
    """
 
    print "1. Demo how to auto handle cookie (in memory)";
    cookieJarInMemory = cookielib.CookieJar();
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarInMemory));
    urllib2.install_opener(opener);
    print "after init, cookieJarInMemory=",cookieJarInMemory; #after init, cookieJarInMemory=     #!!! following urllib2 will auto handle cookies
    demoUrl = "http://www.google.com/";
    response = urllib2.urlopen(demoUrl);
    #here, we already got response cookies
    print "after urllib2.urlopen, cookieJarInMemory=",cookieJarInMemory;
    #after urllib2.urlopen, cookieJarInMemory= <cookielib.CookieJar[, , ]>
     
     
    print "2. Demo how to auto handle cookie in file, LWP format";
    cookieFilenameLWP = "localCookiesLWP.txt";
    cookieJarFileLWP = cookielib.LWPCookieJar(cookieFilenameLWP);
    #will create (and save to) new cookie file
    cookieJarFileLWP.save();
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarFileLWP));
    urllib2.install_opener(opener);
    #!!! following urllib2 will auto handle cookies
    demoUrl = "http://www.google.com/";
    response = urllib2.urlopen(demoUrl);
    #update cookies, save cookies into file
    cookieJarFileLWP.save();
    #for demo, print cookies in file
    print "LWP cookies:";
    print open(cookieFilenameLWP).read(os.path.getsize(cookieFilenameLWP));
    # #LWP-Cookies-2.0
    # Set-Cookie3: PREF="ID=34c1415b570a93ae:FF=0:NW=1:TM=1358236121:LM=1358236121:S=gEVVojW4x37ht5n-"; path="/"; domain=".google.com"; path_spec; domain_dot; expires="2015-01-15 07:48:41Z"; version=0
    # Set-Cookie3: NID="67=JI_uEwUm5GDrQ_vCwAp2z_YGU7MdLm5CLMa4CNLF7RQuTDMzrrk1EjRddGcnpoFbht81LaV9spxZQQInf0mPS6lDrvcRqBBL5NOTmy8SwOzA6HWC3iTIo4-o3fO1Udkv"; path="/"; domain=".google.com.hk"; path_spec; domain_dot; expires="2013-07-17 07:48:41Z"; HttpOnly=None; version=0
    # Set-Cookie3: PREF="ID=8f7e4efca89bdb1b:U=f85a4afa4db021aa:FF=2:LD=zh-CN:NW=1:TM=1358236121:LM=1358236121:S=2WR59hDWutdnUJtF"; path="/"; domain=".google.com.hk"; path_spec; domain_dot; expires="2015-01-15 07:48:41Z"; version=0
 
    print "3. Demo how to auto handle cookie in file, Mozilla Format";
    cookieFilenameMozilla = "localCookiesMozilla.txt";
    cookieJarFileMozilla = cookielib.MozillaCookieJar(cookieFilenameMozilla);
    #will create (and save to) new cookie file
    cookieJarFileMozilla.save();
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJarFileMozilla));
    urllib2.install_opener(opener);
    #!!! following urllib2 will auto handle cookies
    demoUrl = "http://www.google.com/";
    response = urllib2.urlopen(demoUrl);
    #update cookies, save cookies into file
    cookieJarFileMozilla.save();
    #for demo, print cookies in file
    print "Mozilla cookies:";
    print open(cookieFilenameMozilla).read(os.path.getsize(cookieFilenameMozilla));
    # # Netscape HTTP Cookie File
    # # http://www.netscape.com/newsref/std/cookie_spec.html
    # # This is a generated file!  Do not edit.
 
    # .google.com   TRUE    /   FALSE   1421308121  PREF    ID=0e05040dd979207c:FF=0:NW=1:TM=1358236121:LM=1358236121:S=jcFid2XgXMIhPUPl
    # .google.com.hk    TRUE    /   FALSE   1374047321  NID 67=klMI_Z5ZPWDjUYrWSUHIE_kYI77_ziJaL0kWRoUGThagME86LKY7H-MNa2wAMI_GklIwYcD8t82qPinxzLd4GLDbmWT0OVLCXhRj0wQDC57dTNAsTs4lhVR7Yjvj2tfn
    # .google.com.hk    TRUE    /   FALSE   1421308121  PREF    ID=028f8b736db06a9a:U=6ba6d080847c8de6:FF=2:LD=zh-CN:NW=1:TM=1358236121:LM=1358236121:S=_1BcC5v3G0ZojVz8
     
    print "4. read cookies from file";
    parseAndSavedCookieFile = "parsedAndSavedCookies.txt"
    parsedCookieJarFile = cookielib.MozillaCookieJar(parseAndSavedCookieFile);
    #parsedCookieJarFile = cookielib.MozillaCookieJar(cookieFilenameMozilla);
    print parsedCookieJarFile; #    parsedCookieJarFile.load(cookieFilenameMozilla);

    print parsedCookieJarFile; #<_MozillaCookieJar.MozillaCookieJar[,,]>
 
     
if __name__=="__main__":
    pythonAutoHandleCookie();

 

总结

Python中的cookie的自动处理,比C#好多了。

至少有已有的库可供使用。虽然用法上,需要稍微多多了解后,才知道如何使用的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python
, cookie
文件
c 编程实例详解、vb教程 编程实例详解、数控编程实例详解、数控车床编程实例详解、matlab编程实例详解,以便于您获取更多的相关知识。

时间: 2024-10-03 19:27:57

Python PycURL 网络编程实例及自动处理Cookie详解的相关文章

Python黑帽编程 3.4 跨越VLAN详解_python

VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLAN中.图2是一个VLAN划分的例子. 图2 实现VLAN的方式有很多种,基于交换设备的VLAN划分,一般有两种: l 基于交换机的端口划分 l 基于IEEE 802.1q协议,扩展以太网帧格式 基于第二层的VLAN技术,有个Trunking的概念,Trunking是用来在不同的交换机之间进行连接,以

linux网络编程用到的网络函数详解用和使用示例_linux shell

一.概念介绍网络程序分为服务端程序和客户端程序.服务端即提供服务的一方,客户端为请求服务的一方.但实际情况是有些程序的客户端.服务器端角色不是这么明显,即互为客户端和服务端.我们编写网络程序时,一般是基于TCP协议或者UDP协议进行网络通信的.TCP:(Transfer Control Protocol)传输控制协议是一种面向连接的协议, 当我们的网络程序使用这个协议的时候,网络可以保证我们的客户端和服务端之间的传输是可靠的.UDP:(User Datagram Protocol)用户数据报协议

python网络编程实例简析_python

本文实例讲述了python网络编程,分享给大家供大家参考. 具体方法如下: 服务端代码如下: from SocketServer import(TCPServer as TCP, StreamRequestHandler as SRH) from time import ctime HOST = '' PORT = 21567 ADDR = (HOST, PORT) class MyRequestHandle(SRH): def handle(self): print 'connecting f

Python Socket 网络编程

原文:Python Socket 网络编程 Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进

Android 网络html源码查看器详解及实例

Android 网络html源码查看器详解及实例 IO字节流的数据传输了解 Handler的基本使用 1.作品展示 2.需要掌握的知识 FileInputStream,FIleOutputStream,BufferInputStream,BufferOutStream的读写使用与区别 //进行流的读写 byte[] buffer = new byte[1024 * 8]; //创建一个写到内存的字节数组输出流 ByteArrayOutputStream byteArrayOutputStream

JavaScript操作Cookie详解

 这篇文章主要介绍了JavaScript操作Cookie详解,本文讲解了什么是Cookie.Cookie基础知识.Cookie常见问题.cookie 有两种清除方式.Cookie基础用法.Cookie高级用法等内容,需要的朋友可以参考下     什么是 Cookie "cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScript 来创建和取回 cookie 的值." - w3school cooki

VMware 虚拟化编程(5) — VixDiskLib 虚拟磁盘库详解之一

目录 目录 前文列表 VixDiskLib 虚拟磁盘库 虚拟磁盘数据的传输方式 Transport Methods VixDiskLib_ListTransportModes 枚举支持的传输模式 VixDiskLib_InitEx 初始化 VixDiskLib 库 VixDiskLib_ConnectEx 连接到 virtual disk library VixDiskLib_Disconnect 断开 VixDiskLib 的连接 VixDiskLib_Cleanup 断开连接之后的清理 Vi

python魔法方法-属性转换和类的表示详解_python

类型转换魔法 类型转换魔法其实就是实现了str.int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: •__int__(self) •转换成整型,对应int函数. •__long__(self) •转换成长整型,对应long函数. •__float__(self) •转换成浮点型,对应float函数. •__complex__(self) •转换成 复数型,对应complex函数. •__oct__(self) •转换成八进制,对应oct函数. •__hex__(s

Python实现的数据结构与算法之快速排序详解_python

本文实例讲述了Python实现的数据结构与算法之快速排序.分享给大家供大家参考.具体分析如下: 一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分).划分元素pivot.right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上:然后分别对left和right两个部分进行 递归排序. 其中