2016-11-25 6 views
1

少しの背景:私はWindows 10コンピュータでPython 2.7.12を使用しています。 これは私がPythonで遭遇した奇妙な問題のうちの1つです。関数内に置くとPythonスクリプトが機能しなくなる

APIに正しいヘッダーを使用してGETリクエストを行い、一部のXMLデータを戻すスクリプトを作成しました。レコードの場合、このようなスクリプトをPythonファイルに貼り付けてCMD経由で実行すると、正常に動作します。

しかし..

これを関数内にラップするとすぐに機能しなくなります。何も他の 、ちょうど関数の内部でそれをラップし、CMDからそれを実行すると、それはもう動作しません

if __name__ == '__main__': 
    my_new_function() 

を使用しています。それでもになりますが、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'割り当ての値です。 –

関連する問題