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 請求?