Apigeeのservice calloutで複数のcookieを扱う方法 | 瀬戸内の雲のように

Apigeeのservice calloutで複数のcookieを扱う方法

Posted: 2019-05-29


スポンサーリンク

目次

背景

Apigeeのservice calloutではcookieを扱うオプションが存在しないため、手動でヘッダを操作してあげる必要があります。今回はその方法をまとめました。

関連記事 : cookieの仕組みを理解するためにcurlでオプションを使わずcookieを設定してみる
 

手順概要

  1. service calloutでヘッダを取得する
  2. python policyでヘッダからcookieを抜き出し、変数化する
  3. 次のservice calloutのヘッダに付与する

 

手順詳細

 

0. 完成したフローのイメージ

こんな感じでポリシーが並ぶはずです

picture

 

1. service calloutでヘッダを取得する

まず最初にservice calloutでリクエストを送ります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout async="false" continueOnError="false" enabled="true" name="first_request">
    <DisplayName>first_request</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>calloutResponse-01</Response>
    <HTTPTargetConnection>
        <Properties/>
        <URL>https://sample_web_page.example.com</URL>
    </HTTPTargetConnection>
</ServiceCallout>

(URLは適当です)
このリクエストに対するレスポンスは calloutResponse-01 に格納されます。

 

先程のレスポンスからcookieの情報を抜き出します。これにはPythonを使います。
Pythonポリシーの設定とPythonスクリプト両方を作成します。

Python Policyのほう

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Script async="false" continueOnError="false" enabled="true" name="restore_cookies_policy">
    <DisplayName>restore_cookies_policy</DisplayName>
    <Properties/>
    <ResourceURL>py://restore_cookies.py</ResourceURL>
</Script>

Pythonスクリプトの中身

### restore_cookies.py

cookie_list = []

# calloutResponseから"Set-Cookie"ヘッダを取り出す。複数ある場合はlistで取得される
all_cookie = flow.getVariable("calloutResponse-01.header.Set-Cookie.values")

# 各要素は "xx=zz; Path=/; HttpOnly" という内容になっているので、 "xx=zz" だけを取り出す
for cookie in all_cookie:
    l = cookie.split(';')
    cookie_list.append(l[0])

# 抜き出したcookieをまとめる
# key1=value1; key2=value2; .... のように";"で区切る
cookie = '; '.join(cookie_list)

# apigeeのフローに変数"cookie"として戻す
flow.setVariable("cookie", cookie)

 

3. 次のservice calloutのヘッダに付与する

先程変数化したcookieを付けて再度APIコールします。

service calloutポリシー全文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout async="false" continueOnError="false" enabled="true" name="second_request">
    <DisplayName>second_request</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest2">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Set>
            <Headers>
                <Header name="Cookie">{cookie}</Header>
            </Headers>
        </Set>
    </Request>
    <Response>calloutResponse-02</Response>
    <HTTPTargetConnection>
        <Properties/>
        <URL>https://sample_web_page.example.com/login</URL>
    </HTTPTargetConnection>
</ServiceCallout>

上記の中で重要なのは

        <Set>
            <Headers>
                <Header name="Cookie">{cookie}</Header>
            </Headers>
        </Set>

という部分です。このパラメータをつけることによりCookieを付与してAPIコールすることになります。


スポンサーリンク




コメント一覧


コメントを投稿する


お名前


コメント内容





TOP back