Я сделал это! Сделал, сделал, сделал, сделал!!! F# function for Windows Azure Storage Tables


Получение списка таблиц Azure на F#

// Learn more about F# at http://fsharp.net 

open System.IO 
open System.Net 
open System.Security.Cryptography

let stringToSign verb contentMD5 contentType date canonicalizedResource =
    System.String.Format("{0}\n{1}\n{2}\n{3}\n{4}", verb, contentMD5, contentType, date, canonicalizedResource)

let getAuthorization user (key : string) (canonicalizedString : string) =
    let hasher = new HMACSHA256(System.Convert.FromBase64String(key))
    let data = System.Text.Encoding.UTF8.GetBytes(canonicalizedString)
    let signature = System.Convert.ToBase64String(hasher.ComputeHash(data))
    System.String.Format(System.Globalization.CultureInfo.InvariantCulture, "SharedKey {0}:{1}", user, signature)

let listOfTables user key = 
    let request_path = "http://ipv4.fiddler:10002/devstoreaccount1/Tables"
    let request_method = "GET"
    let current_date = System.DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture);
    let contentMD5 = System.String.Empty
    let content_type = "application/atom+xml"
    let canonicalized_resource = System.String.Format("/{0}/{1}", user, "devstoreaccount1/Tables");
    let auth_header = getAuthorization user key (stringToSign request_method contentMD5 content_type current_date canonicalized_resource)
    let ms_version = "2009-09-19" 
    let request : HttpWebRequest = downcast WebRequest.Create(request_path)
    request.Method <- request_method 
    request.ProtocolVersion <- (System.Version(1, 1))

    request.ContentType <- content_type 
    request.Method <- request_method 
    request.Headers.Add("x-ms-date", current_date) 
    request.Headers.Add("Authorization", auth_header)
    request.Headers.Add("DataServiceVersion", "1.0;NetFx")
    request.Headers.Add("MaxDataServiceVersion", "1.0;NetFx")
    request.Headers.Add("Accept-Charset", "UTF-8")
    request.Headers.Add("x-ms-version", ms_version) 
    let response : HttpWebResponse = downcast request.GetResponse()
    let dataReader = response.GetResponseStream()
    let streamReader = new StreamReader(dataReader)
    let str_response = streamReader.ReadToEnd()
    str_response 

printfn "%s" (listOfTables "devstoreaccount1" "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==")
Реклама

Метки: ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s


%d такие блоггеры, как: