在没有curl和wget情况下发送HTTP请求

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

posted @ 2024-11-04 14:14  lixin[at]hitwh  阅读(7)  评论(0编辑  收藏  举报