twisted-有密码保护的页面

本文详细介绍了如何使用Twisted库处理HTTP请求中的401状态码,通过验证用户名和密码来获取授权,进一步展示了解决常见网络编程问题的方法。
from twisted.web import client, error as weberror

from twisted.internet import reactor

import sys, getpass, base64



def printPage(data):

    print data

    reactor.stop( )



def checkHTTPError(failure, url):

    failure.trap(weberror.Error)

    if failure.value.status == '401':

        print >> sys.stderr, failure.getErrorMessage( )

        # prompt for user name and password

        username = raw_input("User name: ")

        password = getpass.getpass("Password: ")

        basicAuth = base64.encodestring("%s:%s" % (username, password))

        authHeader = "Basic " + basicAuth.strip( )

        # try to fetch the page again with authentication

        return client.getPage(

            url, headers={"Authorization": authHeader})

    else:

        return failure



def printError(failure):

    print >> sys.stderr, "Error:", failure.getErrorMessage( )

    reactor.stop( )



if len(sys.argv) == 2:

    url = sys.argv[1]

    client.getPage(url).addErrback(

        checkHTTPError, url).addCallback(

        printPage).addErrback(

        printError)

    reactor.run( )

else:

    print "Usage: %s <URL>" % sys.argv[0]

 

 

checkHTTPError是从client.getPage返回的Deferred调用 ,在printPage和printError处理函数之前

twisted.python.failure.Failure对象被checkHTTPError调用

本例中checkHTTPError检查HTTP响应代码,failure.value是一个Exception对象,如果状态是401,则使用Authorization头,否则进行标准错误处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值