2016-11-25 61 views
1

一點背景:我在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() 
+0

向我們展示了在何處以及如何將其包裝在一個函數中。 –

+0

我已經更新了答案 –

回答

4

我認爲當你在一個函數縮進它的多行字符串越來越中有空格。將它連接在每一行上,它應該可以工作。

+0

什麼多行字符串? –

+0

「msg」作業的值。 –