尝试获取IBM云对象存储中的所有桶时出现异常



我试图获得我的IBM云对象存储帐户中的所有桶名:将connect()方法的返回值传递给get_buckets(cos)方法。下面是代码段。

def connect():
# Create resource
cos = ibm_boto3.resource("s3",
ibm_api_key_id=COS_API_KEY_ID,
ibm_service_instance_id=COS_INSTANCE_CRN,
config=Config(signature_version="oauth"),
endpoint_url=COS_ENDPOINT
)
return cos
def get_buckets(cos):
print("Retrieving list of buckets")
print(cos.buckets.all())

COS_ENDPOINT = "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints">

下面是我看到的错误:

python3.8/site-packages/ibm_botocore/parsers.py",第432行,在_parse_xml_string_to_domparser.feed (xml_string)xml.etree.ElementTree.ParseError:格式不正确(无效标记):第1行,第0列

在处理上述异常时,出现了另一个异常:

File "/usr/local/lib/python3.8/site-packages/ibm_botocore/parsers.py",第435行,在_parse_xml_string_to_dom提高ResponseParserError (ibm_botocore.parsers。ResponseParserError:无法解析响应(格式不正确(无效令牌):第1行,第0列),收到无效XML:

任何帮助都是感激的,谢谢!

我遇到了这个确切的问题,并意识到问题与您正在放入的COS端点有关。我犯了一个错误,看到了"终点"值在IBM COS实例的服务凭据中,并认为这是从SDK访问COS的端点。它实际上是一个JSON列表,包含所有不同区域(每个区域的公共、私有和直接版本)可用的所有不同端点。这就是为什么boto3在期望得到XML时却抱怨得到JSON的原因。

如果你访问了"端点"网址为https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints,您可以看到不同地区的所有可用值&网站,但大多数时候你只想使用你所在地区的公共地址,例如:

https://s3.{region}.cloud-object-storage.appdomain.cloud

其中{region}为如eu-gbus-eastca-tor等。

最新更新