Couchbase API bucket创建

2024-09-28 23:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python(3.5)中的请求模块创建Couchbase(v.4.6.2)bucket,但没有成功。代码如下:

import requests
import json
url = 'http://127.0.0.1:8091/pools/default/buckets'
cdb_login = 'Administrator'
cdb_pass = 'adminpassw0rd'
payload = {'bucketType': 'couchbase',
           'authType': 'sasl',
           'saslPassword': 'passw0rd',
           'name': 'newBucket01',
           'ramQuotaMB': 512,
           'replicaNumber': 1,
           'conflictResolutionType':'lww',
           'flushEnabled': 1}

r = requests.post(url, auth=(cdb_login, cdb_pass), data=json.dumps(payload))
print(r.status_code, r.reason, r.text)

响应为错误:

400 Bad Request {"errors":{"authType":"invalid authType"},"summaries":{"ramSummary":{"total":4831838208,"otherBuckets":641728512,"nodesCount":1,"perNodeMegs":0,"thisAlloc":0,"thisUsed":0,"free":4190109696},"hddSummary":{"total":317653053440,"otherData":123855113749,"otherBuckets":29577092,"thisUsed":0,"free":193768362599}}}

我试图强制HTTPDigestAuth而不是像这样的基本默认值:

r = requests.post(url, auth=requests.auth.HTTPDigestAuth(cdb_login, cdb_pass), data=json.dumps(payload))

它抛出

401 Unauthorized 

(请注意,登录名和密码与上述相同)。所以它也不起作用。你知道吗

“Administrator”和“adminpassw0rd”是我用来访问Couchbase admin GUI(127.0.0.1:8091)的日志和密码。如果我使用bash中的CURL,这些参数可以工作并创建bucket:

import subprocess
create_bucket_bash = ['curl', '-X', 'POST', '-u', 'Administrator:adminpassw0rd', 'http://127.0.0.1:8091/pools/default/buckets',
                      '-d', 'name=newBucket01',
                      '-d', 'conflictResolutionType=lww',
                      '-d', 'authType=sasl',
                      '-d', 'ramQuotaMB=512',
                      '-d', 'saslPassword=passw0rd',
                      '-d', 'bucketType=couchbase']
subprocess.call(create_bucket_bash)

我在请求中遗漏了什么或做错了什么?你知道吗


Tags: importbashauthjsonurlbucketloginpass
1条回答
网友
1楼 · 发布于 2024-09-28 23:12:19

REST端点需要URL编码的值而不是JSON,如果您直接传递有效负载,它应该可以工作。你知道吗

r = requests.post(url, auth=(cdb_login, cdb_pass), data=payload)

你试过使用pythonsdk的集群管理API吗?它可以交互式地为您创建存储桶。你知道吗

例如:

from couchbase.admin import Admin

admin = Admin('Administrator', 'password', host='10.112.162.101', port=8091)

# create bucket
admin.bucket_create('bucket_name',
                    bucket_type='couchbase',
                    bucket_password='passw0rd',
                    replicas=1,
                    ram_quota=100,
                    flush_enabled=False)

# optionally wait for bucket to be ready
admin.wait_ready('bucket_name',
                 timeout=10.0,
                 sleep_interval=0.2)

相关问题 更多 >