在沒有curl和wget情況下傳送HTTP請求

lixin[at]hitwh發表於2024-11-04

Bash 的 /dev/tcp 功能為使用者提供了一個直接的方式,透過 TCP 套接字傳送 HTTP 請求,這一功能可以在沒有額外工具的情況下執行簡單的網路操作。

傳送HTTP GET請求

#!/bin/bash
# 開啟一個 TCP 連線到 baidu.com 的 80 埠,並將其分配給檔案描述符 3
exec 3<>/dev/tcp/baidu.com/80
# 向檔案描述符 3 傳送 HTTP 請求
echo -ne "GET / HTTP/1.1\r\nHost: baidu.com\r\nConnection: close\r\n\r\n" >&3
# 從檔案描述符 3 讀取響應並輸出到標準輸出
cat <&3
# 關閉檔案描述符 3
exec 3<&-

指令碼模板

#!/bin/bash

exec 3<>/dev/tcp/baidu.com/80
lines=(
    'GET / HTTP/1.1'
    'Host: baidu.com'
    'Connection: close'
    ''
)
printf '%s\r\n' "${lines[@]}" >&3
while read -r data <&3; do
    echo "got server data: $data"
done
exec 3>&-

原文:如何在 Bash 中沒有 curl 或 wget 情況下發出 HTTP 請求?

相關文章