macpro上python3的http驗證

2021-08-09 06:09:42 字數 3317 閱讀 4727

最近開始學習用python做web開發,參考書為python核心程式設計第三版,遇到了python的http驗證問題,發現驗證出錯,本人使用mac pro 10.12,安裝python3,pycharm程式設計,查閱很多資料都是python2或者windows系統,解決方案比較舊,寫這篇文章來紀念一下頭一次解決學習問題的雞凍心情,並以此開博,同時致敬可愛的學長,努力向他看齊

1.首先,寫下python3的http驗證指令碼(urlopen_auth3.py),並標註出了與python2的不同,及書上**的錯誤。

importurllib.request,urllib.parse,urllib.error     #python2中為urllib2,到python3中歸到urllib中,並分為幾個模組

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..

returnurl

defrequest_version(url):

frombase64

importb64encode #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)

returnreq

forfunctype

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的情況,需要重新設定,本人此處小小推薦一下

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

3.**和localhost的ip都沒有問題,但依舊報錯 connection refused 訪問被拒絕,且同時,safari無法開啟http://localhost,說明網路方面依舊有問題。此時需要對mac的web sharing設定更改。

對於mac 10.8之前的系統,開啟web sharing比較簡單,只需從設定改變,方法如下:

開啟system preferences -->sharing,左側列表中會有web sharing選項,勾選開啟。

對於mac 10.8之後的系統,則沒有此選項,需要 開啟終端,輸入以下**:

此時,用safari開啟localhost測試,顯示為 it works!  此時開啟成功。

4.此時回到pycharm中執行urlopen_auth3.py,可以執行,無報錯。

驗證成功。

此處還要說明一下,本人在嘗試的過程中還在終端執行了其他**,按照參考文章的意思,應該是要設定為訪問 http://localhost/~username ,但最後結果沒有訪問,不太清楚這段**有沒有起到作用,留做乙個問題。

參考文章: 

此處就不做記錄了。

linux上python3的安裝

我這裡使用的時centos7 mini,centos系統本身預設安裝有python2.x,版本x根據不同版本系統有所不同,可通過 python v 或 python version 檢視系統自帶的python版本 有一些系統命令時需要用到python2,不能解除安裝。下面介紹python3的安裝步驟...

在linux上安裝python3

bin bash echo 正在安裝依賴軟體包 請稍等.yum y install gcc gcc c make zlib devel bzip2 devel openssl devel sqlite devel readline devel libffi devel wget dev null i...

在linux上安裝python3

我們原裝的centos上是有python2.7的,不建議刪除,可以做個python3共存的。python python 2.7.5 default,nov 20 2015,02 00 19 gcc 4.8.5 20150623 red hat 4.8.5 4 on linux2 which pyth...