macpro上python3的http验证

         最近开始学习用python做web开发,参考书为python核心编程第三版,遇到了python的HTTP验证问题,发现验证出错,本人使用Mac Pro 10.12,安装python3,pycharm编程,查阅很多资料都是python2或者windows系统,解决方案比较旧,写这篇文章来纪念一下头一次解决学习问题的鸡冻心情,并以此开博,同时致敬可爱的学长,努力向他看齐微笑


 1.首先,写下python3的http验证脚本(urlopen_auth3.py),并标注出了与python2的不同,及书上代码的错误。

import urllib.request,urllib.parse,urllib.error     #python2中为urllib2,到python3中归到urllib中,并分为几个模块

LOGIN = 'wesley'
PASSWD = "you'llNeverGuess"
URL = 'http://localhost'
REALM = 'Secure Archive'

def handler_version(url):
    hdlr = urllib.request.HTTPBasicAuthHandler()       #python2中为 .. = urllib2.HTTPBas..
    hdlr.add_password(REALM,urllib.parse.urlparse(url)[1],LOGIN,PASSWD)    #python2中为 ..(REALM,urlparse(url)..
    opener = urllib.request.build_opener(hdlr)         #python2中为 .. = urllib2.build_opener..
    urllib.request.install_opener(opener)          #python2中为 urllib2.instal..
    return url

def request_version(url):
    from base64 import  b64encode    #python2中为 ..import encodestring ,此处书上错误,python3中base64没有encodestring,编码为b64encode
                                     #对应解码为b64decode
    req = urllib.request.Request(url)               #python2中为 ..= urllib2.Request..
    b64str = b64encode(bytes('%s:%s' % (LOGIN,PASSWD),'utf-8'))[:-1].    #同样,书上错误,此处应使用b64encode
    req.add_header("Authorization","Basic %s" % b64str)
    return req

for funcType in ('handler','request'):
    print('*** Using %s: ' % funcType.upper())
    url = eval('%s_version' % funcType)(URL)
    f = urllib.request.urlopen(url).           #python2中为 ..= urllib2.urlopen..
    print(str(f.readline(),'utf-8'))         #python3与python2的print语法不同,python2中为 print f.readline()
    f.close()

2.运行程序,报错,大概报错内容如下

首先要说明的是,URL已经设为http://localhost,此时需要检查localhost是否指向127.0.0.1,在终端ping一下检查。

打开终端,输入 ping localhost,运行如下,即说明指向正确


若此时出现了指向不是127.0.0.1的情况,需要重新设置,本人此处小小推荐一下

https://superuser.com/questions/541961/mac-os-x-mountain-lion-cant-ping-telnet-localhost-point-to-a-wrong-public-ip

是英文的,本人看了感觉解答不错,有需要可以看看。


3.代码和localhost的IP都没有问题,但依旧报错 connection refused 访问被拒绝,且同时,Safari无法打开http://localhost,说明网络方面依旧有问题。此时需要对Mac的web sharing设置更改。

对于Mac 10.8之前的系统,打开web sharing比较简单,只需从设置改变,方法如下:

打开System preferences -->Sharing,左侧列表中会有web sharing选项,勾选打开。

 对于Mac 10.8之后的系统,则没有此选项,需要 打开终端,输入以下代码:

$ sudo apachectl start

$ sudo apachectl stop

$ sudo apachectl restart

$ http -v

此时,用safari打开localhost测试,显示为 It works!  此时打开成功。


4.此时回到pycharm中运行urlopen_auth3.py,可以运行,无报错。


验证成功。


此处还要说明一下,本人在尝试的过程中还在终端运行了其他代码,按照参考文章的意思,应该是要设置为访问 http://localhost/~username ,但最后结果没有访问,不太清楚这段代码有没有起到作用,留做一个问题。

参考文章:http://blog.163.com/chenchen..1986/blog/static/7606314620141871119631/ 

此处就不做记录了。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值