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コールすることになります。


スポンサーリンク




コメント一覧

2021/04/08 01:44:12

tyncさん

Some schools aren't going to require essays, so the others are going to utilize the Coalition composition questions, even while others (such as UGA) may possess their particular essay questions that are short. ... All these will be the concerns that is going to soon be exhibited on both associations college-specific webpages from the Coalition program. https://www.pursuantmedia.com/2018/11/25/help-with-understanding-of-the-custom-definition-essay-writing-services/



コメントを投稿する


お名前


コメント内容





TOP back