前提・実現したいこと
XreaのAPIドキュメント
こちらのAPIを使って、メールアドレスをPythonから登録しようと考えています。
このAPIドキュメントを見る限り、パラメーターを多次元辞書で送信しなきゃいけないようです。(JSON形式は使えないようです。)
PythonでrequestsをつかってPOSTしようとしているのですが、多次元辞書でパラメータを送信することはできるのでしょうか?
発生している問題・エラーメッセージ
実行すると以下のようなレスポンスが返ってきます。
{'status_code': 500, 'error_code': '100002', 'error_target': 'param not array ', 'message': 'param not array :正しくありません。'}
おそらくPOST時にパラメータが多次元辞書として送信されていないのだと思います。
該当のソースコード
Python
1import requests 2import json 3 4XREA_ACCOUNT = os.environ.get('XREA_ACCOUNT') #Xreaのアカウント名 5XREA_SERVER = os.environ.get('XREA_SERVER') #Xreaのサーバー名 6XREA_API_KEY = os.environ.get('XREA_API_KEY') #XreaのAPI_KEY 7XREA_DOMAIN = os.environ.get('XREA_DOMAIN') #Xreaの登録しているドメイン名 8 9def create_mail_account(user_id, password): 10 url = 'https://api.xrea.com/v1/mail/edit' 11 data_params = { 12 'account': XREA_ACCOUNT, 13 'server_name': XREA_SERVER, 14 'api_secret_key': XREA_API_KEY, 15 'param': { 16 'address_name': user_id, 17 'address_domain': XREA_DOMAIN, 18 'address': f'{user_id}@{XREA_DOMAIN}', 19 'force': 1, 20 'pop_how': 1, 21 'pop_pass': password, 22 'quota': 10, 23 'autorespond': 0, 24 'clamd': 1, 25 'spamd': 0, 26 'customd': 0 27 } 28 } 29 print(json.dumps(data_params)) # 一度ここで作った辞書データを確認しています。 30 res = requests.post(url, data=data_params) #ここでデータをPOSTしています。 31 res_json = json.loads(res.text) # レスポンスをjson形式に変換しています。 32 print(res_json) # jsonデータを確認しています 33 34 if res_json['status_code'] == 200: # ステータスコードが200(成功)ならTrueを返します。 35 return True 36 else: 37 return False
試したこと
この部分を
Python
1data_params = { 2 'account': XREA_ACCOUNT, 3 'server_name': XREA_SERVER, 4 'api_secret_key': XREA_API_KEY, 5 'param': { 6 'address_name': user_id, 7 'address_domain': XREA_DOMAIN, 8 'address': f'{user_id}@{XREA_DOMAIN}', 9 'force': 1, 10 'pop_how': 1, 11 'pop_pass': password, 12 'quota': 10, 13 'autorespond': 0, 14 'clamd': 1, 15 'spamd': 0, 16 'customd': 0 17 } 18 }
このようにしましたが、結果は何も変わりませんでした。
Python
1data_params = { 2 'account': XREA_ACCOUNT, 3 'server_name': XREA_SERVER, 4 'api_secret_key': XREA_API_KEY, 5 'param[address_name]': user_id, 6 'param[address_domain]': XREA_DOMAIN, 7 'param[address]': f'{user_id}@{XREA_DOMAIN}', 8 'param[force]': 1, 9 'param[pop_how]': 1, 10 'param[pop_pass]': password, 11 'param[quota]': 10, 12 'param[autorespond]': 0, 13 'param[clamd]': 1, 14 'param[spamd]': 0, 15 'param[customd]': 0 16}
また、ほかにも、res = requests.post(url, data=data_params)
のdata=
をjson=
にしたりしましたがそうするとどうやらjsonデータを読み取ってないようです。
補足情報(FW/ツールのバージョンなど)
Pythonのバージョンは3.7.1です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。