AWS Webサービスにサインする文字列を作成する必要があります。Scalaでクエリ文字列コンポーネントをバイト順で並べ替えるにはどうすればいいですか?
documentationによれば、クエリ文字列コンポーネントをバイト順でソートする必要があります。例えば
は、この:私は次のメソッドを持っている私のコードで
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
Action=DescribeJobFlows
SignatureMethod=HmacSHA256
SignatureVersion=2
Timestamp=2011-10-03T15%3A19%3A30
Version=2009-03-31
:
Action=DescribeJobFlows
Version=2009-03-31
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
SignatureVersion=2
SignatureMethod=HmacSHA256
Timestamp=2011-10-03T15%3A19%3A30
はこれをソートされ
def getSigningStr(params: Seq[(String, String)]) =
"GET\n" + host + "\n/\n" + params.map {
case (k, v) =>
val encV = URLEncoder.encode(v, "UTF-8")
s"$k=$encV"
}.mkString("&")
私params
が含まれていSeq
ですタプル。例えば、("Action", "DescribeJobFlows")
。 getSigningStr
をバイトオーダーで並べ替えるにはどのように拡張できますか?あなただけのマッピングの前にsortBy
を使用して「キー」に並べ替えることができますが、結果はまったく同じと仮定したパラメータでなければなりません - 代わり
def getSigningStr(params: Seq[(String, String)]) =
"GET\n" + host + "\n/\n" + params.map {
case (k, v) =>
val encV = URLEncoder.encode(v, "UTF-8")
s"$k=$encV"
}.sorted.mkString("&")
:
おそらく少し誤解を招くと思います大事な事柄。 (大文字は小文字の前に来るが、ASCIIコードは小さい) –