Blue Prism で Web API を呼ぶときに、応答(Response)がバイナリだったときのための Tips☆
4連休だからツシマ、やってると思った?
…残念☆
それどころじゃなかったんだぁ。。
(2度目)
Blue Prism で Web API を呼ぶときに、応答(Response)がバイナリだったら、ちょっと困ること
Blue Prism は 6.4 から Web API という機能が
追加されました。これを使うことで、
Blue Prism から REST および SOAP API
を呼び出すのがとても簡単になりました。
しかし、現時点の Web API 機能には、
若干、残念なところもあります。
応答(HTTP Response)がテキストである
ことを大前提としていることです。
たとえば、GET リクエストに対して、
ファイルをバイナリで返してくるような
REST API があったりすると、、
- REST API を呼ぶ(GET)
- ファイルがバイナリ形式で Response として返ってくる
- Blue Prism の Web API がバイナリをテキストに変えてしまう(たぶん Unicode かなんか)
- ファイルをテキストエディタで開いたみたいな、変な文字列が返される
…こうなってしまうと、
いくつかの情報が失われ、
この(ファイルをテキストエディタで開いたみたいな)
文字列をバイナリに変えても、
ファイルは復元されません。
おのれ、ブ〇カス!
(八つ当たり)
HTTP Request の応答(Response)をバイナリとして取得する
これでは困るので、
Web API の Response をバイナリ(binary)として受け取り、
そこから base64 にエンコーディングするなり、
なんなりとできるようにします。
いったいどうすればいいんだ。。
…
……
………
…お困りのようですキョねぇ。
あ、あなたは、
プ リ ズ マ ン
プ リ ズ ム マ ン !
…黙って聞いていれば、
まったくもって貧弱キョ~。
Web API 機能に限界?
バイナリが返されると困る?
取るに足らない泣き言は
聞きたくないキョ~。
そ ん な も の は
コ ー ド ス テ ー ジ で
ゴ リ 押 し す れ ば
なんとでもなるキョ~!
ゴリ押しした。
コードステージを配置し、
名前空間を宣言。
コードはこんな感じにしました。
'コードステージで Web API を呼び出すことで、レスポンスをテキストにせず受け取る
Dim Req As HttpWebRequest
Dim Res As HttpWebResponse
Dim MemStream As New MemoryStream()
Dim ResStrm As IO.Stream = Nothing
Try
Req = HttpWebRequest.Create(URL)
Req.Headers.Add("Authorization", "Bearer " & Access_Token)
Res = Req.GetResponse()
ResStrm = Res.GetResponseStream()
ResStrm.CopyTo(MemStream)
File_binary = MemStream.ToArray
File_base64 = System.Convert.ToBase64String(File_binary)
Catch ex As Exception
Throw ex
Finally
If ResStrm IsNot Nothing Then ResStrm.Dispose()
MemStream.Close
End Try
ベアラー(Bearer)トークンを Authorization
ヘッダに入れて、GET リクエストを送るだけ。
単純である。
Response はバイナリとして(File_binary)、
また base64 エンコーディングした形で出力
(File_base64)されます。
やったぜ。
まとめ
- コードステージでゴリ押し!強力無比と言わざるを得ない
- しかし乱用は禁物。自分でコードを書くというのは、思った以上にリスクを考慮する必要がある
必殺技は、毎回、
ぶっ放すもんじゃー
ないってことだぜ!