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 情報を PreMappingJSON 形式で上書きと追加ができます。:

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

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました