как публиковать данные и двоичные данные, используя urllib2 в python

Я по существу хочу сделать это:

curl -X POST "http://URL?u=user&p=password" --data-binary @myconfig.json

с urllib2.

Я нашел примеры отправки только юзера и пароля, или только бинарника, но не оба одновременно, а некоторые противоречат друг другу.

Я делаю это, чтобы создать influxdb с политикой хранения на основе инструкций здесь:

https://docs.influxdata.com/influxdb/v0.8/advanced_topics/sharding_and_storage/

curl -X POST "http://localhost:8086/cluster/database_configs/mydb?u=root&p=root" --data-binary @myconfig.json

Спасибо!


person Gil Zellner    schedule 07.04.2016    source источник


Ответы (1)


import urllib2
import json

url = 'http://url.com?u=user&p=pass'
data = json.dumps({'config':'configData'}) # your JSON File goes in here, as argument to dumps.
cont_len = len(data)
req = urllib2.Request(url, data, {'Content-Type': 'application/json', 'Content-Length': cont_len})
f = urllib2.urlopen(req)
response = f.read()
f.close()

Это решает!

Обратите внимание, что с urllib2 вы не можете указать файл .json. Вы просто помещаете его содержимое в функцию json.dumps.

person Adeola    schedule 07.04.2016
comment
не работает, говорит Ошибка HTTP 400: неверный запрос. Я собираюсь добавить дополнительную информацию к вопросу. - person Gil Zellner; 12.04.2016
comment
Хорошо, @GilZellner. Пожалуйста, сделай. - person Adeola; 12.04.2016
comment
поцарапайте это, похоже, ошибка была на моей стороне при создании URL. Спасибо! - person Gil Zellner; 12.04.2016
comment
Это работает, потому что рассматриваемые данные на самом деле не двоичные данные, а json, который является строкой. Если бы это были байты, это не сработало бы. - person little_birdie; 17.06.2021