TypeError: request () получил неожиданный аргумент ключевого слова 'json' - PYTHON, AWS - PullRequest
0 голосов
/ 30 августа 2018

Есть ли здесь кто-нибудь, кто может помочь мне с этим скриптом Python.

Когда я выполняю этот скрипт, я получаю эту ошибку:

TypeError: request () получил неожиданный аргумент ключевого слова 'json'

import boto3
import requests
from requests_aws4auth import AWS4Auth

host = 'XXXXX' # include https:// and trailing /
region = 'ap-northeast-1'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

# Register repository

headers = {"Content-Type": "application/json"}
path = '_snapshot/XXXXX' # the Elasticsearch API endpoint
url = host + path

payload = {
  "type": "s3",
  "settings": {
    "bucket": "XXXXX",
    "region": "ap-northeast-1",
    "role_arn": "XXXXX"
  }
}



r = requests.put(url, auth=awsauth, json=payload, headers=headers)

print(r.status_code)
print(r.text)

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Проблема в том, что в Amazon Linux / 2.8.1 (и, возможно, в других выпусках) по умолчанию установлены запросы == 1.2.3. Согласно примечаниям к выпуску для модуля запросов, параметр 'json' был добавлен только в 2.4.2 (2014-10-05)

Вы можете проверить установленную версию и обновить ее до последней версии следующим образом:

$ pip show requests | grep Version
Version: 1.2.3

$ sudo /usr/local/bin/pip install --upgrade requests

$ pip show requests | grep Version
Version: 2.8.1
0 голосов
/ 30 августа 2018

Попробуйте просто r = requests.put(url, auth=awsauth, headers=headers). Похоже, аргумент json = payload не нужен, потому что заголовки включают этот формат json. Более подробная информация здесь (https://github.com/requests/requests/issues/2664) также может быть полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...