HTTP 請求
在 Github 上編輯
此範例示範如何向伺服器發送 HTTP 請求。
若要向伺服器發送請求,您可以使用 `fetch` API。
let resp = await fetch("https://example.com");
回應是一個 `Response` 物件。其中包含狀態碼、標頭和主體。
console.log(resp.status); // 200
console.log(resp.headers.get("Content-Type")); // "text/html"
console.log(await resp.text()); // "Hello, World!"
回應主體也可以讀取為 JSON、ArrayBuffer 或 Blob。一個主體只能讀取一次。
resp = await fetch("https://example.com");
await resp.arrayBuffer();
/** or await resp.json(); */
/** or await resp.blob(); */
回應主體也可以分塊串流。
resp = await fetch("https://example.com");
for await (const chunk of resp.body!) {
console.log("chunk", chunk);
}
在發送請求時,您也可以指定方法、標頭和主體。
resp = await fetch("https://example.com", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "foobar",
},
body: JSON.stringify({
param: "value",
}),
});
`fetch` 也接受 `Request` 物件,而不是 URL + 選項。
const req = new Request("https://example.com", {
method: "DELETE",
});
resp = await fetch(req);
主體除了字串之外,也可以是任何型別陣列、blob 或 URLSearchParams 物件。
const url = "https://example.com";
new Request(url, {
method: "POST",
body: new Uint8Array([1, 2, 3]),
});
new Request(url, {
method: "POST",
body: new Blob(["Hello, World!"]),
});
new Request(url, {
method: "POST",
body: new URLSearchParams({ "foo": "bar" }),
});
也可以使用 `FormData` 物件作為主體,透過 `fetch` 發送表單。
const formData = new FormData();
formData.append("name", "Deno");
formData.append("file", new Blob(["Hello, World!"]), "hello.txt");
resp = await fetch("https://example.com", {
method: "POST",
body: formData,
});
Fetch 也支援串流請求主體。
const bodyStream = new ReadableStream({
start(controller) {
controller.enqueue(new TextEncoder().encode("Hello, World!"));
controller.close();
},
});
resp = await fetch("https://example.com", {
method: "POST",
body: bodyStream,
});
使用 Deno CLI 在本地端執行此範例
deno run --allow-net https://deno-docs.dev.org.tw/examples/scripts/http_requests.ts