HTTP Requestコンポーネントを使用すると、指定したURLへHTTPリクエストを送信することができます。
HTTP Requestコンポーネントは入力ペイロード(cv.Payload
)をプロパティに応じてHTTPリクエストのBodyコンテンツとしてHTTPリクエストを実行し、そのHTTPレスポンスのBodyを出力ペイロード(cv.Payload
)に書き出します。
Content-TypeプロパティによるHTTPリクエスト時のBodyの内容
Content-Typeプロパティ | HTTPリクエスト時のBodyの内容 |
---|---|
なし | 入力ペイロードはBodyに設定されずにHTTPリクエストを実行します。 |
デフォルト | 入力ペイロードの型に応じてContent-Typeを自動で選びます。 |
文字列型 | 「text/plain; charset=utf-8」でPayloadを文字列としてHTTPリクエストを実行します。 |
JSON配列、JSONオブジェクト | 「application/json」として、Payloadをマーシャリングしたバイト列でHTTPリクエストを実行します。 |
バイト列 | 「application/octet-stream」にしてPayloadを文字列に変換したものをBodyとしてHTTPリクエストを実行します。 |
その他 | 「text/plain」にして文字列に変換したものをBodyとしてHTTPリクエストを実行します。 |
application/x-www-form-urlencoded | 入力ペイロードはJSONオブジェクト型として、キーと値を「=」ではさみ、それぞれを&で区切った形でBodyにした上で、HTTPリクエストを実行します。(この場合で、JSON Object型以外のデータが入力としてきた場合はエラーとなります。) |
multipart/form-data | 入力ペイロードはJSON Object型として、キーと値をマルチパートで区切り、Content-Typeのmultipart/form-dataはバウンダリを自動的に付加してHTTPリクエストを実行します。ファイルを送信する場合にはこちらを使用します(この場合、JSON Object型以外のデータが入力としてきた場合はエラーとなります。) |
それ以外の任意に入力されたContent-Type | 入力されたContent-Typeで入力ペイロードをバイト列にしたものをBodyとして出力します。 |
HeadersプロパティによるHTTPヘッダーの上書きと追加
Headersプロパティ | 説明 |
---|---|
cp.Headers |
リクエストのヘッダー |
入力と出力のペイロード
入力ペイロード | 説明 |
---|---|
cv.Payload |
HTTPリクエストのBody |
出力ペイロード | 説明 |
---|---|
cv.Payload |
HTTPレスポンスのContent-Typeヘッダが“application/json“の場合はJSON型、“text/*“でcharset(utf-8/shift_jis/euc-jp/iso-2022-jp)が指定されている場合は文字列として、その他のContent-Typeヘッダの場合はバイト列のまま格納します。 |
cv. RawBody |
HTTPレスポンスのBodyをバイト列のまま格納します。 |
コンポーネントプロパティ
プロパティー名 | 説明 |
---|---|
HTTPメソッド | GET,POST,HEAD,PUT,DELETE |
URL | HTTPリクエストを送信するURL |
Content-Type | HTTPヘッダのContent-Type |
認証方式 | なし, ベーシック認証, ベーシック/ダイジェスト認証, Bearer認証. cp.Authorizationの値で指定する場合は、 "(none)" , "prebasic" , "basicdigest" , "bearer" のいずれか |
ユーザ名 | ベーシック認証ユーザ名 |
パスワード | ベーシック認証パスワード |
トークン | Bearerトークン |
高度な機能 | 詳細設定の機能を使用 |
無効なSSL/TLSサーバー証明書を許可 | https通信をする際のSSL/TLSサーバー証明書が無効な場合にも処理を継続するかのフラグ |
リトライ回数 | サーバとのコネクションが確立できないエラー、HTTPレスポンスが受信できないエラー、HTTPレスポンスが500以上、408と429の場合にリトライをする回数 |
リトライ間隔 | リトライする場合の次にリトライするまでの間隔値 |
タイムアウト | HTTPリクエストのレスポンスタイムアウト値 |
プロキシURL | Proxy利用時のURL |
プロキシユーザ名 | Proxy利用時のユーザ名 |
プロキシパスワード | Proxy利用時のパスワード |
リクエスト/レスポンスダンプ | なし, Bodyなし, Bodyあり |
※ 無効なSSL/TLSサーバー証明書を許可はcp.InsecureSkipVerifyとして、PreMappingで cp.InsecureSkipVerify=trueとすることでプログラムでも制御ができます。
コンポーネント変数
コンポーネント変数 | 説明 |
---|---|
cv.Payload | レスポンスのbody |
cv.StatusCode | リクエスト結果 |
cv.Headers | レスポンスのヘッダー |
cv.ContentLength | レスポンスの長さ |
Content-Typeプロパティ
HTTPRequestコンポーネントは入力PayloadがJSON Object型で、Content-Typeプロパティが (application/x-www-form-urlencoded) のときと (multipart/form-data) のときでそれぞれ、以下のようなBodyを作成して送信します。
入力Payload
{
"key1": "value1",
"key2": "value2"
}
(application/x-www-form-urlencoded)のときのBody
POST ....
Content-Type: application/x-www-form-urlencoded
key1=value1&key2=value2
(multipart/form-data)のときのBody
POST ....
Content-Type: multipart/form-data; boundary=XXXXX
--XXXXX
Content-Disposition: form-data; name="key1"
value1
--XXXXX
Content-Disposition: form-data; name="key2"
value2
--XXXXX--
multipart/form-dataを使用したファイル送信の指定方法
入力Payload
{
"name": "<key>",
"filename": "<path>",
"filenameOfContentDisposition": "<filename>"
"contentType": "image/jpeg"
}
name: Content-Dispositionヘッダのnameパラメータの指定。keyがある場合はそれを自動で使いますが、指定して上書きすることができます。親が配列などでkeyがないときはnameは必須です。
key: ファイルを指定しないときはkeyでBodyを指定する。文字列型で指定する。その他の型の場合でも文字列に自動変換して使用します。JSON Object型でも文字列に変換します。
filename: Bodyをファイルで指定する。ファイルのパスの指定はdataディレクトリからの相対もしくは絶対パスで指定します。セミコロンで区切ると複数のファイルを指定することができまか。またワイルドカードも指定できます。複数のファイルを指定した場合は、それぞれのファイルで1つのパートとなります。
フォームでmultipleを使用したときは複数ファイルで同一nameで送るときに使えます。個別に各パートで同一nameを使ってもできますし、サーバー側の仕様にあわせて指定してください。
contentType: filenameが指定された場合のContent-Typeヘッダを指定します。指定がない場合は指定されたファイルの拡張子から自動判定します。
filenameOfContentDisposition: Content-Dispositionヘッダのfilenameパラメータを指定します。指定がない場合は指定されたファイルのディレクトリ部分は取り除いたファイル名部分だけを使用します。
フォームでmultipleを使用する場合
例えば、以下のように フォームで、ファイル選択にmultipleを指定するとブラウザは複数ファイル選択可能なダイアログを開きます。そこでsample1.txt/sample2.txtと2つのファイルを選択すると以下のようなmultipart/form-dataをブラウザはPOSTします。
<form>
<input type="file" name="userfile" multiple="multiple"/>
<button type="submit" ...>Submit</button>
</form>
------XXXXX
Content-Disposition: form-data; name="userfile"; filename="sample1.txt"
Content-Type: text/plain
abc
------XXXXX
Content-Disposition: form-data; name="userfile"; filename="sample2.txt"
Content-Type: text/plain
def
------XXXXX--
Content-Dispositionのnameパラメータは同じものが使われています。
同様にHTTPRequestコンポーネントでワイルドカードなどで複数ファイルを指定すると同じnameパラメータを使用し複数のパートを作っていきます。
これとは別にフォームでinputを複数書いてnameに別の名前を指定すると以下のようなmultipart/form-dataがブラウザによって作られます。
<form>
<input name="userfile1" type="file" />
<input name="userfile2" type="file" />
<button type="submit" ...>Submit</button>
</form>
------XXXXX
Content-Disposition: form-data; name="userfile1"; filename="sample1.txt"
Content-Type: text/plain
abc
------XXXXX
Content-Disposition: form-data; name="userfile2"; filename="sample2.txt"
Content-Type: text/plain
def
------XXXXX--
HTTPRequestコンポーネントではワイルドカードは使えませんがこのフォームと同じmultipart/form-dataをつくることもできます。
サーバー(API)の仕様にあわせて使用してください。
multipart/form-dataを使用したファイル送信の設定例
Telegramに写真を送信する例(写真にcaptionもつけています)
https://telegram-bot-sdk.readme.io/reference/sendphoto
{
"chat_id": "-100XXXXX",
"photo": {"filename": "sample.jpg"},
"caption": "caption"
}
Boxでファイルをアップロードする例
(BoxのAPIはmultipartのパートがattributes->fileの順になってないと動かないため配列で指定している)
https://ja.developer.box.com/reference/post-files-content/
[
{
"name": "attributes",
"value": {
"name": "sample.jpg",
"parent": {"id": "0"}
}
},
{
"name": "file",
"filename": "sample.jpg"
}
]
ConvertAPIにファイル送信する例
https://www.convertapi.com/a/api/xlsx-to-pdf#snippet=curl
{
"StoreFile": "true",
"File": {"filename": "sample.xlsx"}
}
サーバー側でPHPを使用して$_FILESで複数ファイルを取得する例
(名前の最後に配列のように[]をつけるとPHP側で複数ファイルをハンドルできます。ファイルはワイルドカードでも、セミコロンで区切って複数指定することもできます)
https://www.php.net/manual/ja/reserved.variables.files.php
{
"file[]": {"filename": "*.jpg"}
}
コンポーネントのテスト
テストエンドポイントを作成し、HTTPリクエストを送信するには、requestbin.comという無料のサービスをお勧めします。 このサービスのライブダッシュボードでは、受信リクエストを確認できます。 (上記のリンクはパブリックrequestbinを作成することに注意してください。プライベートrequestbinの場合、アカウントが必要になります)。
ヘッダーの上書きと追加
HTTPリクエスト Header
情報を PreMapping
で JSON
形式で上書きと追加ができます。:
cp.Headers
= {"X-Header-1": "abc; def", "X-Header-2": ap.Timeout/1000, "X-Header-3": true, "X-Header-4": cp.URL, "Accept": "application/json", "User-Agent": "fugahoge browser"}
Need more help with this?
Join our slack community for help