在 bash 中使用 netcat 发出 http get 请求
Using netcat to issue a http get request in bash
我写了下面的脚本(目前还不支持索引)。我遇到的问题是关于使用 netcat 加载页面。我可以使用命令行手动执行此操作,但是当我尝试让我的脚本发出完全相同的命令时,我可以在没有错误的情况下不执行任何操作。我唯一能想到的可能是我的输出去别的地方了?
#!/bin/bash
PORT=80
while [ true ]
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT
printf "GET /$path HTTP/1.1\n"
printf "Host: $domain\n"
printf "\n"
printf "\n"
done
您需要将请求头传递给nc
的标准输入。
一种方法是输入重定向:
while true
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT <<EOF
GET /$path
Host: $domain
EOF
done
nc
通过将标准输入复制到给定的 address:port,并将从那里读取的任何内容复制到标准输出。
{
printf "GET /%s HTTP/1.1\r\n" "$path"
printf "Host: %s\r\n" "$domain"
printf "\r\n"
printf "\r\n"
} | nc "$domain" "$port"
HTTP 要求在每行末尾添加 \r\n
。有些服务器只接受 \n
,但有些服务器遵守法律条文,只接受指定的 \r\n
。
您需要将这些行发送到 nc
的标准输入。
最好用printf "Get %s HTTP/1.1\r\n" "$path" because
$pathmay contain
%signs and that would confuse
printf`.
我写了下面的脚本(目前还不支持索引)。我遇到的问题是关于使用 netcat 加载页面。我可以使用命令行手动执行此操作,但是当我尝试让我的脚本发出完全相同的命令时,我可以在没有错误的情况下不执行任何操作。我唯一能想到的可能是我的输出去别的地方了?
#!/bin/bash
PORT=80
while [ true ]
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT
printf "GET /$path HTTP/1.1\n"
printf "Host: $domain\n"
printf "\n"
printf "\n"
done
您需要将请求头传递给nc
的标准输入。
一种方法是输入重定向:
while true
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT <<EOF
GET /$path
Host: $domain
EOF
done
nc
通过将标准输入复制到给定的 address:port,并将从那里读取的任何内容复制到标准输出。
{
printf "GET /%s HTTP/1.1\r\n" "$path"
printf "Host: %s\r\n" "$domain"
printf "\r\n"
printf "\r\n"
} | nc "$domain" "$port"
HTTP 要求在每行末尾添加
\r\n
。有些服务器只接受\n
,但有些服务器遵守法律条文,只接受指定的\r\n
。您需要将这些行发送到
nc
的标准输入。最好用
printf "Get %s HTTP/1.1\r\n" "$path" because
$pathmay contain
%signs and that would confuse
printf`.