少しの背景:私は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()
は、関数内でこれをどこでどのようにラップするかを示しています。 –
回答を更新しました –