トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

axios.postで送信

Content-Lengthが付かない

       const params = new FormData();
       params.append('temporary_reference_number', tempReceptionNumber);

       const headers = {
         accept: 'application/json',
         'X-Access-Key': accessKey,
         'X-Provider-Id': businessId,
         ...params.getHeaders(),
       };

       await axios.post(URL_APPLICATION_DATA, params, { headers: headers })

         // thenで成功した場合の処理をかける
         .then(async response => {
           //成功時の処理
         
           // catchでエラー時の挙動を定義する
         }).catch(async err => {
           //エラー時の処理
         });

フォームデータをPOSTするとContent-LengthがセットされずTransfer-Encoding: chunkedになってしまいWAFではじかれてしまう現象が発生するのでgetLengthSyncでlengthを取得しヘッダーにセットしなくてはならない。

       const params = new FormData();
       params.append('temporary_reference_number', tempReceptionNumber);

       const headers = {
         accept: 'application/json',
         'X-Access-Key': accessKey,
         'X-Provider-Id': businessId,
         ...params.getHeaders(),
         'Content-Length': params.getLengthSync(),                                                                                                                                                                     
       };

       await axios.post(URL_APPLICATION_DATA, params, { headers: headers })

         // thenで成功した場合の処理をかける
         .then(async response => {
           //成功時の処理
         
           // catchでエラー時の挙動を定義する
         }).catch(async err => {
           //エラー時の処理
         });

getLengthSyncはストリームをカウントできない。

ファイルを添付する時はgetLengthSyncではストリームをカウントできないのでgetLength()を使用する。getLengthは非同期なので送信処理をコールバックで記述しなくてなならない。(コールバックを記述するのはめんどい!!)

       let signatureFileData = fs.createReadStream(signatureFileName);
       let certificateFileData = fs.createReadStream(certificateFileName);

       const params = new FormData();
       params.append('temporary_reference_number', tempReceptionNumber);
       params.append('signature', signatureFileData);
       params.append('certificate', certificateFileData);

       params.getLength((err,length) => { 
           if(err){ reject(err); }
           let headers = {
               accept: 'application/json',
               'X-Access-Key': accessKey,
               'X-Provider-Id': businessId,
               ...params.getHeaders(),
               'Content-Length': length,
           };

           axios.post(URL_DIGITAL_SIGN, params, { headers: headers })

             // thenで成功した場合の処理をかける
             .then(response => {
            }).catch(async err => {
            });                                                                                                                                                                                               
     });