一點背景:我在Windows 10計算機上使用Python 2.7.12。 這是迄今爲止我遇到過的Python中最奇怪的問題之一。Python腳本停止工作時,我把它放在函數內
我已經編寫了一個腳本,它向API發出GET請求,並帶有正確的標題,並獲取一些XML數據。爲了記錄,當我將這樣的腳本粘貼到一個python文件中並通過CMD運行它時,它可以很好地工作。
但是...
它停止,只要我把這個包在函數內部工作。沒有 別的,只是把它包在函數內部,並使用
if __name__ == '__main__':
my_new_function()
從CMD運行它,它就不管用了。它仍然工程但API說我有錯誤的身份驗證憑據,因此我沒有得到任何數據回來。
我翻遍了這段代碼中的每一段字符串,它都是ASCII編碼的。我也檢查了時間戳,他們都是正確的。
這是我的腳本:
SECRET_KEY = 'YYY'
PUBLIC_KEY = 'XXX'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
函數內部相同的代碼:
def get_orders():
SECRET_KEY = 'XXX'
PUBLIC_KEY = 'YYY'
content_type = 'application/xml'
date = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
method = 'GET'
uri = '/uri'
msg = """{method}
{content_type}
{date}
x-bol-date:{date}
{uri}""".format(content_type=content_type,
date=date,
method=method,
uri=uri)
h = hmac.new(
SECRET_KEY,
msg, hashlib.sha256)
b64 = base64.b64encode(h.digest())
signature = PUBLIC_KEY + b':' + b64
headers = {'Content-Type': content_type,
'X-BOL-Date': date,
'X-BOL-Authorization': signature}
r = requests.get('example.com/uri', headers=headers)
if __name__ == '__main__':
get_orders()
向我們展示了在何處以及如何將其包裝在一個函數中。 –
我已經更新了答案 –