云服务器内容精选
-
问题定位方法(Java SDK) 开发过程中,您有任何问题可以在github上提交issue,或者在华为云 对象存储服务 论坛中发帖求助。 使用OBS Java SDK对接OBS服务可能会遇到许多问题,您可以通过下面介绍的步骤进行问题分析和定位: 确保使用的是OBS Java SDK的最新版本, 您可以从这里下载最新版本; 确保开启了OBS Java SDK日志功能,开启方式参见 日志分析 章节,通常建议的日志级别为WARN; 确保使用OBS Java SDK的程序代码遵照OBS客户端通用示例编写,所有ObsClient的接口调用都进行了异常处理,例如上传对象的示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ObsClient obsClient = null; try { String endPoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AC CES S_KEY_ID和SECRET_ACCESS_KEY_ID。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); obsClient = new ObsClient(ak, sk, endPoint); HeaderResponse response = obsClient.putObject("bucketname", "objectname", new ByteArrayInputStream("Hello OBS".getBytes())); // 可选:调用成功后,记录调用成功的HTTP状态码和服务端请求ID System.out.println(response.getStatusCode()); System.out.println(response.getRequestId()); } catch (ObsException e) { // 推荐:发生异常后,记录失败的HTTP状态码、服务端错误码、服务端请求ID等 System.out.println("HTTP Code: " + e.getResponseCode()); System.out.println("Error Code:" + e.getErrorCode()); System.out.println("Request ID:" + e.getErrorRequestId()); // 推荐:发生异常后,记录异常堆栈信息 e.printStackTrace(System.out); } 您可以从这里查看关于ObsException的详细说明。 当调用ObsClient的接口发生异常时,从ObsException异常或日志文件中获取HTTP状态码、OBS服务端错误码后进行对照,排查异常原因; 如果通过步骤4未能排查到异常原因,可从ObsException异常或日志文件中获取OBS服务端请求ID后联系OBS服务端运维团队定位异常原因; 如果从ObsException异常或日志文件中无法获取OBS服务端请求ID,请收集ObsException的异常堆栈信息并联系OBS客户端运维团队定位异常原因。 父主题: 问题定位(Java SDK)
-
跨域请求被拦截 Access to XMLHttpRequest at 'xxx' from origin 'xxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
-
请求成功但返回结果缺少某些字段 此类错误一般有两种原因: 在桶的CORS配置中ExposeHeader配置不完整,例如未配置ETag(导致上传对象成功后无法获取ETag值)、未配置x-obs-request-id(导致请求完成后无法获取OBS服务端请求ID)等,解决方法:请参考配置桶的CORS章节重新配置桶的CORS; 使用了旧版本的SDK,解决方法:升级到最新版本的SDK,可以从这里下载最新版本。
-
无法获取上传后的ETag值 使用ObsClient.putObject和ObsClient.uploadPart上传文件成功后返回结果中无ETag值,此类错误一般有两种原因: 桶的CORS配置中ExposeHeader不包含ETag头域,解决方法:按照文档配置桶的CORS为桶配置完整的CORS配置; 桶的CORS配置中ExposeHeader包含ETag头域,但浏览器的返回结果屏蔽了ETag头域(一般发生在低版本的浏览器),解决方法:升级到高版本且完全支持HTML5的浏览器。
-
返回码 通过进程等方式调用obsutil时,无法实时查看回显信息。obsutil支持在进程运行结束后,根据不同的运行结果生成不同的返回码,具体的返回码及其含义如表1所示。您可以通过以下方式获取最近一次运行结果的返回码,然后根据返回码分析并处理问题。 macOS/Linux操作系统,执行以下命令获取最近一次运行结果的返回码: echo $? Windows操作系统,执行以下命令获取最近一次运行结果的返回码: echo %errorlevel% 表1 返回码 返回码 含义 常见场景举例 0 执行成功 上传对象成功。 1 文件不存在 执行cp上传文件,输入的文件路径不存在。 2 任务不存在 执行cp恢复失败的上传任务,指定的Task Id不存在。 3 参数错误 执行cp上传文件,输入不支持的附加选项; 执行cp下载文件,输入的cloud_url不合法。 说明: cloud_url为桶路径或对象路径,当下载桶中的所有对象时,cloud_url的格式必须为obs://bucketname;当下载指定对象时,cloud_url的格式必须为obs://bucketname/key。 4 检查桶状态错误 执行cp上传文件夹,待上传的桶不存在。 5 命令初始化错误 加载配置文件出错; 执行cp上传文件夹,并指定了-o参数,但无法成功创建保存结果清单文件的文件夹。 6 执行错误 执行ls查询桶列表,因为网络超时而失败。 7 操作不支持 执行chattri修改对象属性,但桶不是3.0版本的桶。 8 批量任务执行不完全成功 执行cp批量下载对象,部分对象下载失败。 9 中断错误 执行命令过程中用户手动Ctrl+C中断任务执行。 -1 其他未知错误 - 父主题: 问题定位
-
认证不通过 认证不通过的请求会被API网关拒绝,得到类似如下的返回,返回以APIGW开头的错误码。 比如使用Token认证请求没有带Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: x-auth-token not found", "error_code": "APIGW.0301", "request_id": "7775eaa6b4bbe5934e565349bd27c298"} 使用了错误的Token,返回如下。 { "error_msg": "Incorrect IAM authentication information: decrypt token fail", "error_code": "APIGW.0301", "request_id": "0e812a89eee650de8e1f55cdae28b2c9"} 使用了错误的AK,会返回如下错误。 Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 119, in response_hook resp.raise_for_status() File "/home/user/.local/lib/python3.7/site-packages/requests/models.py", line 953, in raise_for_status raise HTTPError(http_error_msg, response=self)requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://iam.myhuaweicloud.com/v3/projects?name=cn-north-4During handling of the above exception, another exception occurred:Traceback (most recent call last): File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/credentials.py", line 93, in process_auth_params self.project_id = keystone_list_projects(http_client, request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 49, in keystone_list_projects raise e File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/auth/iam_service.py", line 47, in keystone_list_projects http_response = http_client.do_request_sync(request) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 93, in do_request_sync self.response_error_hook_factory()(response) File "/home/user/.local/lib/python3.7/site-packages/huaweicloudsdkcore/http/http_client.py", line 130, in response_hook raise exceptions.ClientRequestException(response_status_code, sdk_error)huaweicloudsdkcore.exceptions.exceptions.ClientRequestException: ClientRequestException - {status_code:401,request_id:3f979354fbec41b3cc0bd28ce7865e20,error_code:APIGW.0301,error_msg:Incorrect IAM authentication information: ak xxxxxx not exist } 使用了错误的SK,返回如下。 huaweicloudsdkcore.exceptions.exceptions.ApiValueError: Failed to get project id, Incorrect IAM authentication information: verify aksk signature fail, canonicalRequest:GET|/v3/projects/|name=cn-north-4|host:iam.myhuaweicloud.com|x-sdk-date:20210902T011700Z||host;x-sdk-date|e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
-
Token的权限范围问题 在使用Token认证时,需要先申请Token,申请Token时需要填写Token是全局级别的还是项目级别的,如下申请Token接口的请求Body体中scope所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } }} 区域级服务需要获取项目级别的Token(区域默认对应一个项目,这个项目由系统预置),此时请求body中auth.scope的取值为project。 全局级服务需要获取全局级别的Token,此时请求body中auth.scope的取值为domain。 对于区域级服务,如果获取全局级别的Token,虽能使用该Token通过认证,但无法在后端通过鉴权,会导致请求失败。 例如获取一个全局Token,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "domainname" }, "name": "username", "password": "********" } } }, "scope": { "domain": { "id": "0503dda878000fed0f75c0096d70a960" } } }} 然后调用E CS 服务的查询ECS服务器列表的API,则会得到如下响应。表示Token与URL中项目不匹配,返回错误。 { "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }} 此种情况下,如果调用全局级服务的API,如TMS的API,则会正确调用。
-
Token与project不匹配 在使用Token认证时,经常会出现申请了Token,但是申请Token时的权限范围是区域A,但是请求时却请求调用区域B的资源,这是往往会得到类似如下的返回。表示Token与请求不匹配。 { "error": { "message": "tenantId in token is not the same with in URL.", "code": "Common.0018" }} 解决该问题的方法通常有两种: 使用正确权限范围的Token做请求认证,例如要请求区域B的资源,申请Token时填写 使用AK/SK认证鉴权。
-
认证鉴权示例 下面通过举例为您介绍调用API的认证鉴权的关系。 调用API需要认证,如果没有认证,调用会遭到API网关的拒绝。会得到如下回显。 { "error_msg": "Incorrect IAM authentication information: x-auth-token not found", "error_code": "APIGW.0301", "request_id": "7775eaa6b4bbe5934e565349bd27c298"} 此处会返回APIGW.0301的错误码,错误信息意思是缺少x-auth-token,这是API网关返回的内容,表示认证不通过,不能访问。 假设新创建一个IAM用户,未加入任何用户组,这时这个IAM用户没有任何创建华为云资源的权限,如果此时先获取token,然后调用API,可以通过API网关的认证,但是后端云服务会鉴权说没有权限。 例如调用ECS服务的查询ECS服务器列表的API。 GET https://ecs.cn-north-4.myhuaweicloud.com/v1/05041fffa40025702f6dc009cc6f8f33/cloudservers/detail 会得到如下响应,这次返回的不是APIGW的错误码,而是ECS的错误码,表示没有权限,禁止执行该操作。 { "error": { "message": "do not have the required roles, forbidden to perform this action.", "code": "Ecs.0110" }} 如果将上面的用户加入到一个用户组,并给这个用户组授予查询ECS服务器列表的权限。重新 获取Token (注意这里需要重新获取Token,否则Token还是上一次的授权权限),然后调用ECS服务的查询ECS服务器列表的API,则会得到如下响应。 这是正确 { "count": 8, "servers": [ { "fault": null, "id": "78ccc986-016f-4405-94f9-c4d58421eca7", "name": "cce-612884-06913", "addresses": { "377a7782-72e4-4db2-96b7-841d5d6f18a8": [ {...
-
认证、鉴权和授权 认证:由APIG来做(通过Token或AK/SK),判断调用者的身份,是否是合法用户,是否能否访问华为云。 鉴权:由云服务实现,判断调用者是否具有操作某项资源的权限。 授权:在IAM中操作,对某个用户/角色授权,让这个角色具有某种权限。 华为云支持Token和AK/SK两种认证方式。 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 AK/SK长期有效。AK/SK加密调用请求。 推荐使用AK/SK认证,其安全性比Token认证要高。且华为云SDK默认使用AK/SK,优先推荐使用SDK调用API,相对REST API,SDK使用更为便利。
-
终端节点Endpoint 在调用API时,需要通过Endpoint确定访问哪个服务,如下图所示。 对于全局级服务,只有一个Endpoint,例如TMS的Endpoint为tms.myhuaweicloud.com 对于区域级服务,每个region的Endpoint都不同,例如ECS在北京四的Endpoint为ecs.cn-north-4.myhuaweicloud.com。 所有服务的Endpoint详细信息都可以在https://developer.huaweicloud.com/endpoint查询。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格