2

API v2 を介して MtGox (ビットコイン取引所) に接続する必要がある取引プログラムを作成しています。しかし、次のエラーが発生し続けます。

URL: 1 https://data.mtgox.com/api/2/BTCUSD/money/bitcoin/address

HTTP エラー 403: 禁止されています。

私のスクリプトのほとんどは、ここから直接コピーしたものです(これはペーストビン リンクです)。Python 3.3 で動作するように変更する必要がありました。

base64.b64encode を使用するスクリプトの一部に関係していると思われます。私のコードでは、文字列を utf-8 にエンコードして base64.b64encode を使用する必要があります。

                url = self.__url_parts + '2/' + path
                api2postdatatohash = (path + chr(0) + post_data).encode('utf-8')          #new way to hash for API 2, includes path + NUL
                ahmac = base64.b64encode(str(hmac.new(base64.b64decode(self.secret),api2postdatatohash,hashlib.sha512).digest()).encode('utf-8'))
            
                # Create header for auth-requiring operations
                header = {
                     "User-Agent": 'Arbitrater',
                     "Rest-Key": self.key,
                     "Rest-Sign": ahmac
                }

ただし、他の人のスクリプトでは、彼も持っていません。

                url = self.__url_parts + '2/' + path
                api2postdatatohash = path + chr(0) + post_data          #new way to hash for API 2, includes path + NUL
                ahmac = base64.b64encode(str(hmac.new(base64.b64decode(self.secret),api2postdatatohash,hashlib.sha512).digest()))
           
                # Create header for auth-requiring operations
                header = {
                     "User-Agent": 'genBTC-bot',
                      "Rest-Key": self.key,
                     "Rest-Sign": ahmac
                }

その余分なエンコーディングが原因で、ヘッダーの資格情報が正しくないのではないかと考えています。これは Python 2 対 Python 3 の問題だと思います。b64encode または hmac に文字列を渡そうとするとスクリプトが実行されないため、他の人が utf-8 に変更せずにどのように逃げたのかはわかりません。私がしていることに問題はありますか?アウトコードは同等ですか?

4

2 に答える 2

0

WebSocket API を扱っていますが、私の関連する質問でヘルプが見つかる可能性が高いと思います:
Python 3 での MtGox WebSocket API への認証済み呼び出し

また、HTTP 403 エラーは、リクエストに根本的な問題があることを示しているようです。API に間違った認証情報を投げたとしても、403 ではなく、エラー メッセージを応答として受け取っているはずです。私の推測では、間違った HTTP メソッドを使用している可能性があるため、適切なメソッドを使用しているかどうかを確認してください (GET/役職)。

于 2013-11-12T15:11:35.697 に答える