活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      对象存储

      对象存储

        • 最新动态
        • 产品简介
        • 产品定义
        • 基本概念
        • 产品优势
        • 功能特性
        • 产品应用场景
        • 产品规格
        • 地域说明
        • 产品使用限制
        • 与其他服务的关系
        • 产品能力地图
        • 计费说明
        • 计费项
        • 存储费用
        • 流量费用
        • 请求费用
        • 数据取回费用
        • 计费模式
        • 按需计费
        • 包年包月(资源包)计费
        • 资源包概述
        • 资源包购买
        • 查看资源包详情
        • 资源包续订
        • 资源包退订
        • 查看消费明细
        • 欠费
        • 常见问题
        • 快速入门
        • 入门流程
        • 准备工作
        • 开通对象存储服务
        • 获取访问密钥(AK/SK)
        • 查询终端节点(Endpoint)
        • 用户配额
        • 工具下载及使用
        • 创建桶
        • 上传文件
        • 下载文件
        • 删除文件
        • 删除桶
        • 常用实践
        • 用户指南
        • 使用方式
        • 访问规则
        • 统计数据
        • 存储类别
        • 桶管理
        • 桶概述
        • 创建桶
        • 列举桶
        • 桶概览
        • 桶配额
        • 删除桶
        • 对象管理
        • 对象概述
        • 新建目录
        • 上传文件
        • 下载文件
        • 其他文件管理操作
        • 列举文件
        • 复制文件
        • 查看文件
        • 分享文件
        • 解冻归档文件
        • 删除
        • 删除文件
        • 恢复文件
        • 清理碎片
        • 数据管理
        • 生命周期管理
        • 桶清单
        • 数据访问
        • 数据回源
        • 域名管理
        • 数据安全
        • 服务端加密
        • 合规保留
        • 跨域访问设置
        • 多版本管理
        • 防盗链
        • 数据处理
        • 图片处理
        • 监控与日志
        • 监控
        • 日志管理
        • 控制台指南
        • 控制台功能概述
        • 入门操作
        • 入门流程
        • 开通对象存储服务
        • 资源包管理
        • 接入管理(VPC)
        • 创建桶
        • 上传文件
        • 下载文件
        • 删除文件
        • 删除桶
        • 桶管理
        • 创建桶
        • 列举桶
        • 桶概览
        • 搜索桶
        • 桶配额
        • 删除桶
        • 文件管理
        • 新建目录
        • 上传文件
        • 修改文件存储类型
        • 下载文件
        • 其他文件管理操作
        • 列举文件
        • 搜索文件
        • 重命名文件
        • 设置文件标签
        • 通过URL访问对象
        • 复制文件
        • 分享文件
        • 解冻归档文件
        • 删除
        • 删除文件
        • 恢复文件
        • 清理碎片
        • 权限管理
        • 读写权限
        • 桶的读写权限
        • 文件读写权限
        • IAM权限管理
        • 桶策略
        • STS临时授权
        • 桶ACL
        • 数据管理
        • 生命周期管理
        • 生命周期管理简介
        • 生命周期管理配置
        • 桶清单
        • 数据访问
        • 静态页面设置
        • 数据回源
        • 数据回源简介
        • 数据回源配置
        • 数据安全
        • 服务端加密
        • 合规保留
        • 跨域访问设置
        • 多版本管理
        • 对象多版本简介
        • 配置多版本
        • 跨区域复制
        • 防盗链
        • 对象存储迁移服务
        • 服务概览
        • 如何进行迁移前的评估
        • 如何进行对象存储迁移
        • 迁移常见问题及处理
        • 使用前常见问题
        • 使用常见问题
        • 迁移异常处理
        • 各云服务商迁移至ZOS教程
        • 天翼云ZOS之间进行迁移
        • 阿里云OSS迁移至天翼云ZOS
        • 腾讯云COS迁移至天翼云ZOS
        • 华为云OBS迁移至天翼云ZOS
        • 天翼云OOS迁移至天翼云ZOS
        • 监控与日志
        • 监控
        • 日志管理简介
        • 日志管理配置
        • 数据处理指南
        • 图片处理
        • 图片处理概述
        • 使用方式
        • 图片处理参数
        • 图片缩放
        • 图片水印
        • 图片裁剪
        • 图片旋转
        • 格式转换
        • 信息获取
        • EXIF信息删除
        • 质量变换
        • 亮度变换
        • 渐进显示
        • 高斯模糊
        • 自适应方向
        • 获取平均色调
        • 锐化
        • 对比度
        • 内切圆
        • 圆角矩形
        • 索引切割
        • 图片连续处理
        • 图片持久化
        • SDK参考
        • 开发者文档
        • API参考
        • 调用前必知
        • 概述
        • 终端节点
        • 状态码
        • 错误码
        • 资源池regionID列表
        • API说明
        • API概览
        • 如何调用API
        • 构造请求
        • 认证鉴权
        • Python调用示例
        • Java调用示例
        • API
        • 对象存储整体操作
        • 对象存储服务开通
        • 查询ACCESS_KEY以及SECRECT_KEY
        • 资源池列表查询
        • 访问控制endpoint查询
        • 对象存储资源包询价
        • 对象存储STS访问控制
        • 查询对象存储开通状态
        • Bucket操作
        • 创建桶
        • 查询所有桶
        • 删除桶
        • 查询桶信息
        • 查询桶位置信息
        • 查询桶访问权限
        • 查询对象桶对象数量(不含碎片)
        • 查询对象桶碎片数量
        • 查询桶统计信息
        • Bucket进阶操作
        • 设置桶ACL
        • 获取桶ACL
        • 设置桶生命周期配置
        • 查询桶生命周期配置
        • 删除桶生命周期
        • 设置版本管理
        • 查询桶版本控制配置
        • 暂停版本管理
        • 设置桶日志转存
        • 查询桶日志转存配置
        • 关闭日志转存
        • 设置静态网络托管
        • 查询静态网络配置
        • 删除静态网络配置
        • 创建跨域访问策略
        • 获取跨域访问策略
        • 删除跨域访问策略
        • 设置跨区域复制规则(2022.12.15后开放使用)
        • 获取跨区域复制规则(2022.12.15后开放使用)
        • 获取复制的目标区域(2022.12.15后开放使用)
        • 获取跨区域复制进度(2022.12.15后开放使用)
        • 删除跨区域复制规则(2022.12.15后开放使用)
        • 设置桶的合规保留配置
        • 获取桶的合规保留配置
        • 设置桶策略
        • 获取桶策略
        • 删除桶策略
        • 设置桶标签
        • 获取桶标签
        • 删除桶标签
        • 设置桶的加密配置
        • 获取桶的加密配置
        • 删除桶的加密配置
        • 设置请求者付费模式
        • 获取请求者付费配置信息
        • 设置对象存储防盗链
        • 查看对象存储防盗链
        • 修改桶配额
        • 设置桶的事件总线功能开关
        • Object操作
        • 查询桶内碎片列表
        • 下载对象
        • 查看对象列表
        • 创建文件夹
        • 删除文件夹
        • 删除对象
        • 查询对象版本信息
        • 设置对象ACL
        • 获取对象ACL
        • 设置对象标签
        • 查询对象标签
        • 删除对象标签
        • 设置对象保留期限配置
        • 获取对象保留期限配置
        • 复制对象
        • 批量删除对象
        • 生成对象共享链接/ 对象临时下载链接
        • 设置http头
        • 生成对象上传链接
        • 查询对象是否存在
        • 对象解冻
        • 对象修改存储类型
        • 分段操作
        • 列出上传对象的全部分段
        • 删除碎片
        • 查询正在进行中的分段上传
        • 中止分段上传
        • 完成分段上传
        • 初始化分段上传
        • STS访问控制
        • 创建角色
        • 创建策略
        • 绑定角色策略
        • 查询角色列表
        • 查询角色详情
        • 删除角色
        • 查询策略列表
        • 修改策略
        • 删除策略
        • 查询策略详情
        • 解绑角色和策略
        • 客户端承接策略
        • 对象存储迁移
        • 创建对象存储评估任务
        • 查询对象存储评估任务列表
        • 查询对象存储评估任务详情
        • 对象存储评估任务开始
        • 对象存储评估任务暂停
        • 对象存储评估任务恢复
        • 对象存储评估任务删除
        • 创建对象存储迁移任务
        • 查询对象存储迁移任务列表
        • 查询对象存储迁移任务详情
        • 查询迁移任务的失败对象列表
        • 对象存储迁移任务重试
        • 对象存储迁移任务暂停
        • 对象存储迁移任务恢复
        • 对象存储迁移任务删除
        • 最佳实践
        • 最佳实践汇总
        • 通过控制台访问对象存储ZOS
        • 云主机通过内网访问对象存储ZOS
        • 通过生命周期策略实现数据自动管理
        • 使用对象存储迁移服务将第三方云厂商数据迁移至对象存储ZOS
        • 修改文件读写权限
        • 数据一致性校验
        • 对象存储ZOS性能优化最佳实践
        • 通过云监控服务实时监控对象存储ZOS信息
        • 大文件分段上传
        • 解决浏览器跨域(CORS)问题的实践
        • 使用预签名URL直传对象存储
        • 获取对象文件的直接地址(下载链接)
        • 批量删除桶内对象
        • VPC内网中使用和公网相同的域名访问对象存储
        • 使用VPCE方式接入对象存储
        • 使用CDN加速访问对象存储ZOS
        • 常见问题
        • 热点问题
        • 售前常见问题
        • 计费常见问题
        • 存储桶常见问题
        • 对象(文件)常见问题
        • 视频专区
        • 相关协议
        • 中国电信天翼云对象存储服务协议
        • 中国电信天翼云对象存储服务等级协议
        • 常用工具
        • zosfs(预览版)
        • zosfs介绍及下载
        • zosfs使用限制
        • zosfs使用说明
        • iSCSI网关
        • NFS网关
        • 对象迁移工具
        • 文件上云迁移工具
        • S3Browser
        • zosutil
        • 自动化策略工具
        • 自助工具
        • 签名工具
        • SDK工具
        • 网络异常工具
        • 文件下载方式工具
        • 文档下载
          无相关产品

          本页目录

          帮助中心对象存储API参考如何调用APIPython调用示例
          Python调用示例
          更新时间 2025-06-11 14:55:34
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2025-06-11 14:55:34
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接

          此示例仅适用于 Python 3.6 以上版本

          # encoding: utf-8
          import urllib
          
          import requests
          import json
          import hashlib
          import base64
          import hmac
          import datetime
          import uuid
          import os
          import sys
          
          if sys.version_info.major == 2:
              from urllib import quote
          
              sys.setdefaultencoding('utf8')
          else:
              from urllib.parse import quote
              from importlib import reload
          import xml.etree.ElementTree as ET
          
          reload(sys)
          
          METHOD_GET = 'GET'
          METHOD_POST = 'POST'
          METHOD_HEAD = 'HEAD'
          METHOD_PATCH = 'PATCH'
          METHOD_PUT = 'PUT'
          METHOD_DELETE = 'DELETE'
          # file:参数中是否包含文件类型
          file = False
          
          def hmac_sha256(secret, data):
              if type(secret) == bytes:
                  secret = bytearray(secret)
              else:
                  secret = bytearray(secret, 'utf8')
              data = bytearray(data, 'utf8')
              return hmac.new(secret, data, digestmod=hashlib.sha256).digest()
          
          
          def base64_of_hmac(data):
              return base64.b64encode(data)
          
          
          def get_request_uuid():
              return str(uuid.uuid1())
          
          
          def get_sorted_str(data, method):
              """
              鉴权用的参数整理
              :param data: dict 需要整理的参数
              :return: str
              """
              if isinstance(data, str):
                  # data = eval(data)
                  data = json.loads(data)
              sorted_data = sorted(data.items(), key=lambda item: item[0])
              str_list = map(lambda x_y: '%s=%s' % (x_y[0], x_y[1]), sorted_data)
              return '&'.join(str_list)
          
          
          def build_sign(ak, sk, query_params, body_params, eop_date, request_uuid, method, file, content_type):
              """
              计算鉴权字段
              :param query_params: dict get请求中的参数
              :param body_params: dict post请求中的参数
              :param eop_date: str 请求时间,格式为:'%Y%m%dT%H%M%SZ'
              :return: str
              """
              body_str = ""
              if not file:
                  body_str = json.dumps(body_params) if body_params else ''
              if method == "POST" or method == "PUT":
                  if file:
                      body_digest = hashlib.sha256(body_params).hexdigest()
                  else:
                      if isinstance(body_params, dict):
                          body_digest = hashlib.sha256(json.dumps(body_params).encode('utf-8')).hexdigest()
                      else:
                          body_digest = hashlib.sha256(body_params.encode('utf-8')).hexdigest()
              else:
                  body_digest = hashlib.sha256(body_str.encode('utf-8')).hexdigest()
              # 请求头中必要的两个参数
              header_str = 'ctyun-eop-request-id:%s\neop-date:%s\n' % (request_uuid, eop_date)
              # url中的参数,或get参数
              query_str = encodeQueryStr(get_sorted_str(query_params, method))
              signature_str = '%s\n%s\n%s' % (header_str, query_str, body_digest)
              print_log(repr('signature_str is: %s' % signature_str))
              sign_date = eop_date.split('T')[0]
          
              print ("\n")
              print (sign_date)
              print ("\n")
              # 计算鉴权密钥
              k_time = hmac_sha256(sk, eop_date)
              k_ak = hmac_sha256(k_time, ak)
              k_date = hmac_sha256(k_ak, sign_date)
          
              signature_base64 = base64_of_hmac(hmac_sha256(k_date, signature_str))
              # 构建请求头的鉴权字段值
              sign_header = '%s Headers=ctyun-eop-request-id;eop-date Signature=%s' % (ak, signature_base64.decode('utf8'))
              return sign_header.encode('utf8')
          
          
          def get_sign_headers(ak, sk, query_params, body, method, content_type, file, uuid):
              """
              获取鉴权用的请求头参数
              :param query_params: dict get请求中的参数
              :param body: dict post请求中的参数
              :return:
              """
              now = datetime.datetime.now()
              eop_date = datetime.datetime.strftime(now, '%Y%m%dT%H%M%SZ')
              headers = {  # 三个鉴权用的参数
                  'Content-type': content_type,
                  'ctyun-eop-request-id': uuid,
                  'Eop-Authorization': build_sign(ak=ak, sk=sk, query_params=query_params, body_params=body, eop_date=eop_date,
                                                  request_uuid=uuid, method=method, file=file, content_type=content_type),
                  'Eop-date': eop_date,
              }
              return headers
          
          
          def get(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_GET, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          def post(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_POST, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          # 一些新增的调用方法
          def delete(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_DELETE, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          def put(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_PUT, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          def patch(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_PATCH, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          def head(url, query="", params=None, header_params=None, content_type='application/json;charset=UTF-8'):
              queryParam = query
              querystr = ""
              if queryParam:
                  for key, value in queryParam.items():
                      querystr = str(querystr) + str(key) + "=" + str(value) + "&"
                  if len(querystr) > 0:
                      querystr = querystr[0: len(querystr) - 1]
              return execute(ak, sk, url, queryParam, querystr, method=METHOD_HEAD, params=params, header_params=header_params,
                             content_type=content_type)
          
          
          def execute(ak, sk, url, query, querystr, method, params=None, header_params=None,
                      content_type='application/json;charset=UTF-8',
                      file=bool(0), uuid=None):
              params = params or {}
              if 'application/x-www-form-urlencoded' in content_type:
                  params = urllib.urlencode(params)
              header_params = header_params or {}
              # if method == "GET":
              #     query_params, body = (params, {})
              #     query = query_params
              # else:
              query_params = {}
              if len(querystr) > 0:
                  for q in querystr.split('&'):
                      query_params[q.split("=")[0]] = q.split("=")[1]
              body = params
              query = query_params
              request_uuid = get_request_uuid()
              headers = get_sign_headers(ak, sk, query, body, method, content_type, file, request_uuid)
              if not isinstance(header_params, dict):
                  #eval
                  headers.update(json.loads(header_params))
              else:
                  headers.update(header_params)
              headers.update(
                  {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/110.0",
                   "x-amz-acl": "private"}
              )
              if not len(querystr) == 0:
                  url = url + "?" + encodeQueryStr(str(querystr))
              print_log('url: %s' % url)
              print_log('请求方式: %s' % method)
              print_log('请求头:\n %s' % headers)
              print_log('请求参数:\n %s' % params)
              print_log('请求参数类型:\n %s' % type(params))
              requests.packages.urllib3.disable_warnings()
          
              if method == METHOD_GET:
                  res = requests.get(url, params=params, headers=headers, verify=False)
              elif method == METHOD_POST:
                  if 'application/x-www-form-urlencoded' in content_type:
                      res = requests.post(url, data=params, headers=headers, verify=False)
                  elif 'multipart/form-data' in content_type:
                      res = requests.post(url, data=params, headers=headers, verify=False)
                  else:
                      res = requests.post(url, json=params, headers=headers, verify=False)
              elif method == METHOD_PATCH:
                  res = requests.patch(url, data=params, headers=headers, verify=False)
              elif method == METHOD_HEAD:
                  res = requests.head(url, data=params, headers=headers, verify=False)
              elif method == METHOD_PUT:
                  res = requests.put(url, data=params, headers=headers, verify=False)
              elif method == METHOD_DELETE:
                  res = requests.delete(url, data=params, headers=headers, verify=False)
          
              print_log('返回状态码: %s' % res.status_code)
              # if(content_type =="application/xml"):
              print_log('返回: %s' % res.content.decode("utf-8"))
              # else:
              #    print_log('返回: %s' % res.text)
              # dict = dict(res.json())
              # ctresponse = CTResponse(res.status_code, res.text, None, res.headers, dict)
              # print(ctresponse)
              # return ctresponse
              return res.content.decode("utf-8")
          
          
          def print_log(log_info):
              now = datetime.datetime.now()
              log_info = '[%s]: %s' % (str(now), log_info)
              print(log_info)
          
          
          def encodeQueryStr(query):
              afterQuery = ""
              if (len(query) != 0):
                  print(query)
                  param = query.split("&")
                  param.sort()
                  for str in param:
                      if (len(afterQuery) < 1):
                          s = str.split("=")
                          if (len(s) <= 2 and len(s) >= 2):
                              encodeStr = quote(s[1])
                              str = s[0] + "=" + encodeStr
                              afterQuery = afterQuery + str
                          else:
                              encodeStr = ""
                              str = s[0] + "=" + encodeStr
                              afterQuery = afterQuery + str
                      else:
                          s = str.split("=")
                          if (len(s) >= 2):
                              encodeStr = quote(s[1])
                              str = s[0] + "=" + encodeStr
                              afterQuery = afterQuery + "&" + str
                          else:
                              encodeStr = ""
                              str = s[0] + "=" + encodeStr
                              afterQuery = afterQuery + "&" + str
          
              return afterQuery
          
          
          def generate_body(file_list, boundary, params):
              lastbody = bytearray()
              for file in file_list:
                  file_name_key = list(file.keys())[0]
                  file_path = list(file.values())[0]
                  file_name = os.path.basename(file_path)
                  body1_array = bytearray(
                      '--' + boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + file_name_key + "\"; filename=\"" + file_name + "\r\n" + "Content-Type: application/octet-stream" + "\r\n" + "\r\n",
                      'utf8')
                  # body1_array = bytearray('--' + boundary + "\r\n" + "Content-Disposition: form-data; filename=\"" + filename + "\"\r\n" + "Content-Type: application/octet-stream" + "\r\n" + "\r\n")
                  if os.path.exists(file_path):
                      with open(file_path, 'rb') as f:
                          body2_array = bytearray(f.read())
                  body3_array = bytearray("\r\n", 'utf8')
                  lastbody.extend(body1_array)
                  lastbody.extend(body2_array)
                  lastbody.extend(body3_array)
          
              if len(params) and params[0] != {}:
                  for param in params:
                      body1_array = bytearray(
                          '--' + boundary + "\r\n" + "Content-Disposition: form-data; name=\"" + list(param.keys())[
                              0] + "\r\n" + "\r\n" + list(param.values())[0] + "\r\n", 'utf8')
                      body3_array = bytearray("\r\n")
                      lastbody.extend(body1_array)
                      lastbody.extend(body3_array)
              body4_array = bytearray('--' + boundary + "--\r\n", 'utf8')
              lastbody.extend(body4_array)
              return lastbody
          
          
          def convert_obj_to_xml(obj):
              root = ET.Element("__root__")
              convert_obj_to_xml_recursive(obj, root)
              child_elements = root.getchildren()
          
              xml_str = ""
              for element in child_elements:
                  xml_str += ET.tostring(element, encoding='utf-8').decode('utf-8')
          
              return xml_str
          
          
          def convert_obj_to_xml_recursive(obj, parent_element):
              for attr, value in obj.__dict__.items():
                  if value is None or value == "":
                      continue
          
                  if isinstance(value, (str, int, float)):
                      element = ET.SubElement(parent_element, attr)
                      element.text = str(value)
                  elif isinstance(value, list):
                      for item in value:
                          if hasattr(item, '__dict__'):
                              element = ET.SubElement(parent_element, attr)
                              convert_obj_to_xml_recursive(item, element)
                          else:
                              element = ET.SubElement(parent_element, attr)
                              element.text = str(item)
                  elif hasattr(value, '__dict__'):
                      element = ET.SubElement(parent_element, attr)
                      convert_obj_to_xml_recursive(value, element)
          
          # =========================== 请求示例 ====================================
          
          
          # 天翼云用户 ak & sk
          ak = 'your tyy ak'
          sk = 'your tyy sk'
          
          # get 请求示例:查询 region id
          def getRequest():
              url = 'https://zos-global.ctapi.ctyun.cn/v4/oss/list-regions'
              args = {
              }
              get(url, query = args)
          
          # post 请求示例:创建桶
          def postRequest():
              url = 'https://zos-global.ctapi.ctyun.cn/v4/oss/create-bucket'
              args = {
                  'regionID': 'bb9fdb42056f11eda1610242ac110002',  # 华东1
                  'bucket':'bucketName'
              }
              post(url, params = args)
          
          # 执行 get 请求
          getRequest()
          
          
          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  认证鉴权
          下一篇 :  Java调用示例
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明