python抓取网页内容401应该用哪个库_HTTP 401 Unauthorized错误–路由器页面获取 | 学步园...

想抓取TP-Link等路由器的页面源码发现返回[HTTP 401 Unauthorized]错误,经过对HTTP协议文档[RFC-2616]的查找在10.4.2节发现了相关描述,意思就是说如果返回了401错误就表明链接WEB服务器需要HTTP简单认证,而且在服务器的Response中一定[MUST]有WWW-Authenticate头域,客户端应该[SHOULD]重新链接WEB服务器,但在Request的头域中要有HTTP

access authentication

HTTP access authentication描述

其中的描述是这样的:如果收到401错误,客户端必须将用户名密码以如下格式(basic-credentials)放在 Authorization头域中

basic-credentials = base64-user-pass

base64-user-pass =

except not limited to 76 char/line>

user-pass = userid ":" password

userid = *

password = *TEXT

比如想将用户名为"Aladdin"密码为"open sesame"作为验证发送的WEB服务器,HTTP HEADER中应该是这样的:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

其中Basic后面的字符串就是"Aladdin:open sesame"经过base64

GET / HTTP/1.1[\r\n]

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==[\r\n]

[Other Header Field]

用Python实现的HTTP

Request

import socket, sys, base64

host = sys.argv[1]

port = int(sys.argv[2])

user = 'admin'

password = 'admin'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((host, port))

credent = base64.b64encode('%s:%s' % (user, password))

s.sendall("GET / HTTP/1.1\r\nAuthorization: Basic %s\r\n\r\n" % credent)

while True:

data = s.recv(2048)

sys.stdout.write(data)

需要说明的是,许多路由器的认证都是用户名admin密码admin,在python中有base64算法库只需要调用base64.b64encode(str)就可以得到base64算法处理过的字符串了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值