日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

發(fā)送 HTTP 請(qǐng)求(NodeJS)

更新時(shí)間:

本文介紹 API 訂閱方應(yīng)用如何使用 NodeJS 語(yǔ)言發(fā)送 HTTP 請(qǐng)求接入網(wǎng)關(guān)。

前提條件

在進(jìn)行本地應(yīng)用開(kāi)發(fā)前,您需要確保已經(jīng)完成以下操作:

  • 已在 API 網(wǎng)關(guān)控制臺(tái)創(chuàng)建了一個(gè)應(yīng)用,參見(jiàn) 創(chuàng)建應(yīng)用

  • 已將該應(yīng)用的 APPID 提供給了 API 發(fā)布者,并獲得了授權(quán),參見(jiàn) 授權(quán) API

  • 已獲取了如下服務(wù)配置信息。具體獲取方法,參見(jiàn) 獲取服務(wù)端信息

    • 應(yīng)用的訪問(wèn)密鑰(Access Key/Secret Key)

    • API 的域名地址(host)、請(qǐng)求路徑(path)、方法(method)、請(qǐng)求體(body)

操作步驟

發(fā)送請(qǐng)求到網(wǎng)關(guān)本質(zhì)上就是一個(gè)簡(jiǎn)單的 HTTP 請(qǐng)求,但是由于當(dāng)前 API 網(wǎng)關(guān)要求訂閱方必須加簽,所以在發(fā)起 HTTP 請(qǐng)求之前,您需要生成一個(gè)加簽信息,并加入請(qǐng)求 Header 中。

  1. 從網(wǎng)關(guān)獲取訂閱方應(yīng)用的密鑰(Access Key/Secret Key)。

  2. 獲取 API 的 host、method、path,并組裝好必要的參數(shù)。

  3. 引入 sofa-signature-js,對(duì)請(qǐng)求進(jìn)行加簽。

    1. 若拉取不到 sofa-signature-js 則執(zhí)行 npm i sofa-signature-js 下載。

    2. 訪問(wèn) https://www.npmjs.com/package/sofa-signature-js 執(zhí)行命令 npm 拉取。

  4. 組裝請(qǐng)求。

  5. 使用 HttpClient(fetch、axios 等)發(fā)起 HTTP 請(qǐng)求到 API 網(wǎng)關(guān)。

NodeJS 代碼示例

import {
  Signature,
  SignatureAlgorithm,
  HTTPDigestWithBase64,
  DigestAlgorithm
} from "sofa-signature-js";

import fetch from 'node-fetch';

// api 信息
const gateway = "5jzkcn0idt3w****.apigateway.inc.alipay.net";
const method = "POST";
const path = "/simple/demo";
const headers = {
  'Content-Type': 'application/json'
};
const body = JSON.stringify({
  name:'jack',
});


// app ak
const accesskey = "m9hoHiqtjylG****"; 
// app sk
const secretkey = "sxCg1uk6UjGARr1hPswE0W2KHe86****"; 

let digest;
// 為 request body 生成 digest,可以保證 request body 不被篡改
if(method !== 'GET' && method !== 'DELETE'){
   digest = HTTPDigestWithBase64(DigestAlgorithm.HMACSHA256, body);
}else{
   digest = 'SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
}
headers["digest"] = digest;

// 創(chuàng)建加簽對(duì)象
const sign = new Signature(
  accesskey,
  secretkey,
  SignatureAlgorithm.HMACSHA256,
  signheaders
);

// signheaders 決定對(duì)哪些 header 進(jìn)行加簽
const signheaders = ["(request-target)", "digest"];
// 生成簽名
const authorization = sign.doSignature(secretkey, headers, method, path);
// 將簽名放到 header
headers["Signature"] = authorization;


// 發(fā)起請(qǐng)求
fetch(`${gateway}${path}`,{
  method,
  headers,
  body
})
.then(function(res) {
  return res.json();
})