Как мне отправить ОБА файл и сформировать данные, используя запросы в python? - PullRequest
0 голосов
/ 09 октября 2018

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

response = requests.post(
    'https://blockchain-starter.eu-gb.bluemix.net/api/v1/networks/<network id>/chaincode/install',
    headers={
        'accept':        'application/json',
        'content-type':  'multipart/form-data',
        'authorization': 'Basic  ' + b64encode(credential['key'] + ":" + credential['secret'])
    },
    data={
        'chaincode_id':      chaincode_id,
        'chaincode_version': new_version,
        'chaincode_type':    chaincode_type,
        'files':             open('chaincode.zip', 'rb')
    }
)

Однако, когда я звоню, я получаю 500 Внутренняя ошибка сервера (API - this , вчастности Peers / Install Chaincode ).Учитывая, что звонок, который я сделал ранее на одну из конечных точек GET, работает правильно, я предполагаю, что с моим запросом что-то не так, может кто-нибудь помочь?

ОБНОВЛЕНИЕ:

Решением было удаление *Заголовок 1012 * и переместите загружаемый файл в собственный аргумент files:

response = requests.post(
    https://blockchain-starter.eu-gb.bluemix.net/api/v1/networks/<network id>/chaincode/install,
    headers={
        'accept':        'application/json',
        'authorization': 'Basic  ' + b64encode(credential['key'] + ":" + credential['secret'])
    },
    data={
        'chaincode_id':      chaincode_id,
        'chaincode_version': new_version,
        'chaincode_type':    chaincode_language
    },
    files={
        'file': open('chaincode_id.zip', 'rb')
    }
)

1 Ответ

0 голосов
/ 09 октября 2018

Как признал человек, задающий вопрос, этот ответ ralf htp , похоже, решил их проблему.

Не устанавливайте заголовок Content-type самостоятельно, оставьте его пиреквестам для генерации

def send_request():
payload = {"param_1": "value_1", "param_2": "value_2"}
files = {
     'json': (None, json.dumps(payload), 'application/json'),
     'file': (os.path.basename(file), open(file, 'rb'), 'application/octet-stream')
}

r = requests.post(url, files=files)
print(r.content)
...