rest-用存储的REST调用也是401错误~~

问题描述

用存储的REST调用也是401错误~~

我按照教程使用REST调用BLOB的内容,也遇到的是401错误,这是什么情况?还有人也遇到了吗?

解决方案

您好,
请问您使用的是REST中的哪一个方法?据我所知,如果使用REST去调用blob中内容是,复杂的地方主要是在构造签名,首先我建议您先阅读下这篇文档:
https://msdn.microsoft.com/zh-cn/library/azure/dd179428.aspx
例如该方法:

 public void PutBlob(String containerName, String blobName)

{

    String requestMethod = "PUT";

    String urlPath = String.Format("{0}/{1}", containerName, blobName);

    String storageServiceVersion = "2012-02-12";

    String dateInRfc1123Format = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);

    String content = "Andrew Carnegie was born in Dunfermline";

    UTF8Encoding utf8Encoding = new UTF8Encoding();

    Byte[] blobContent = utf8Encoding.GetBytes(content);

    Int32 blobLength = blobContent.Length;

    const String blobType = "BlockBlob";

    String canonicalizedHeaders = String.Format(

            "x-ms-blob-type:{0}nx-ms-date:{1}nx-ms-version:{2}",

            blobType,

            dateInRfc1123Format,

            storageServiceVersion);

    String canonicalizedResource = String.Format("/{0}/{1}", AzureStorageConstants.Account, urlPath);

    String stringToSign = String.Format(

            "{0}nnn{1}nnnnnnnnn{2}n{3}",

            requestMethod,

            blobLength,

            canonicalizedHeaders,

            canonicalizedResource);

    String authorizationHeader = Utility.CreateAuthorizationHeader(stringToSign);

    Uri uri = new Uri(AzureStorageConstants.BlobEndPoint + urlPath);

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

    request.Method = requestMethod;

    request.Headers.Add("x-ms-blob-typeobType);

    request.Headers.Add("x-ms-dateteInRfc1123Format);

    request.Headers.Add("x-ms-versionorageServiceVersion);

    request.Headers.Add("AuthorizationthorizationHeader);

    request.ContentLength = blobLength;

    using (Stream requestStream = request.GetRequestStream())

    {

        requestStream.Write(blobContent, 0, blobLength);

    }

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())

    {

        String ETag = response.Headers["ETag"];

    }

}

我们需要构造出shared key,同时注意header中的各个信息。
处理rest问题和调试rest错误时,我个人建议您可以使用fiddler去troubleshoot您的reqest请求,去解决问题。
同时,建议您参考这个博客:https://convective.wordpress.com/2010/08/18/examples-of-the-windows-azure-storage-services-rest-api/
Regards,
Will
如果您想进一步了解Windows Azure, Windows Azure 官网欢迎您的访问

时间: 2024-09-16 12:28:46

rest-用存储的REST调用也是401错误~~的相关文章

blob-用存储的REST调用也是401错误~~

问题描述 用存储的REST调用也是401错误~~ 我按照教程使用REST调用BLOB的内容,也遇到的是401错误,这是什么情况?还有人也遇到了吗? 解决方案 应该是访问权限的问题,你的认证信息对不对

(一一一)存储持续性、作用域和链接性

在之前,说过自动存储(随函数内声明而建立,函数消亡而消亡).静态存储(全局都存在).动态存储(一般是用new).   但是,涉及到多文件的时候,存储类别如何影响信息在文件间的共享.   C++使用三种(C++11使用4种)不同的方案来存储数据,这些方案的区别就在于数据保留在内存中的时间.   自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性是自动的.它们在程序开始执行其所属的函数或者代码块时被创建,在执行完函数或代码块时,它们使用的内存被释放.C++有两种存储持续性为自动的变量

Kubernetes Docker-in-Docker存储注意事项

本文讲的是Kubernetes Docker-in-Docker存储注意事项[译者的话]本文介绍了基于Kubernetes运行Docker-in-Docker在存储方面应该注意的事项,介绍了Argo这个插件,演示了具体的流程和测试方式.鉴于在功能和性能上都表现良好,为我们开拓了一个权限的玩转Docker容器的思路. Docker容器是运行其他工具的非常有用的工具,因此将Docker容器作为另一个容器的一个工具来调用是非常自然的.Docker-in-Docker(也称DinD)有很多用例 - 1)

《Oracle高性能SQL引擎剖析:SQL优化与调优机制详解》一1.2 显示执行计划

1.2 显示执行计划 我们现在知道,有三个途径可以获取查询计划:v$sql_plan.dba_hist_sql_plan和PLAN_TABLE.如果需要读取一条SQL语句的执行计划,就需要知道该条语句的SQL_ID,如果该语句存在多个游标或者执行计划,则还需要知道游标的CHILD_NUMBER或计划的哈希值(可选).而无论我们通过哪个途径来获取执行计划,显示方式主要是两种:语句查询和包DBMS_XPLAN显示. 1.2.1 通过查询语句显示计划 通过查询语句从一些视图里读出执行计划并作格式化输出

HDS:云技术的存储经济学

在经济萧条时期,各个行业的企业都面临预算压力,在进行IT投资时的抉择尤为艰难.而新的存储架构所带来的众多商机以及潜在问题,使得这一问题变得更为复杂.因此,对于许多企业来说,找到对于IT系统优化和成本控制的规律性原则,是维持业务良性运转和利用原有资源创造更多价值的关键.即使经济形势不好,企业对于IT系统的四个关键性的战略原则将始终保持不变,这些原则为企业进行IT系统优化和成本控制提供准绳.无论是大的经济危机还是技术飞跃,这四个原则都一样适用,它能使企业确定和估量成本.减少资本支出.控制经营费用,并

【IOS-COCOS2D-X 游戏开发之五】游戏存储之COCOS2DX自带CCUSERDEFAULT类详解;

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/653.html 本篇跟大家分享下Cocos2dX中的存储,其中也介绍些细节容易犯错的问题: 在Cocos2dX中提供了自带存储类:CCUserDefault  ,当然了这里Himi强调一点,如果你的数据量比较大,建议使用SQL存储比较适合,另外一点要注意的是,尽可能不要在Cocos2dX中使用与平台相关的ap

软件定义存储 你的实施正确吗?

在合理实施的情况下,软件定义存储能够在应用和物理存储资源之间建立硬件独立和负载无关的存储应用层.与任何技术实现一样,在实施软件定义存储抽象层时也有正确和错误的方式. 一种建立存储虚拟化层的方式是通过存储硬件的应用编程接口,利用厂商在其机载的.基于控制器的软件所提供的"钩子",它作为一种增值软件用来创建卷以及将卷与阵列上的服务相连接.像这样的方式面临的问题是,与多厂商提供的底层工具包保持同步的成本很高,也就是软件成本.如果一家硬件厂商在其固件或软件做了更改,那么软件定义存储厂商必须赶上这

S3QL 1.5发布 数据在线存储的文件系统

S3QL是一个文件系统,使用类似于Google Storage.http://www.aliyun.com/zixun/aggregation/2467.html">Amazon S3或OpenStack的存储设备进行存储所有的在线数据.它支持Amazon S3以及任意的SFTP服务器,并有效地提供了一个动态和无限能力的硬盘,可以从任何能上网的电脑进行访问.S3QL提供一个标准.功能齐全的Unix文件系统,在概念上从任何本地文件系统没有什么区别.S3QL具有附加功能,如压缩.加密.重复数据

C++学习从零开始(六)

再看main函数,先通过ABC a;定义了一个变量,因为要在栈上分配一块内存,即创建了一个数字(创建装数字的内存也就导致创建了数字,因为内存不能不装数字),进而创建了一个ABC的实例,进而调用ABC的构造函数.由于这里没有给出参数(后面说明), 因此调用了ABC::ABC(),进而a.a为1,a.pF和a.count都为0.接着定义了变量r,但由于它是ABC&,所以并没有在栈上分配内存,进而没有创建实例而没有调用ABC::ABC.接着调用a.Do,分配了一块内存并把首地址放在a.pF中. 注意上