Linux没有curl和wget怎么发送http请求?

文摘   2024-10-15 08:23   辽宁  

Linux没有curl和wget怎么发送http请求?

在某些Linux环境中,默认可能没有安装curlwget,可能也无法快速安装这两个命令,比如离线环境,服务器没有网络,然而我们依然可以通过其他方式发送HTTP请求。

本文将详细介绍两种无需依赖curlwget的请求发送方法。


方案一

在Linux中,Bash脚本提供了非常强大的能力,借助TCP套接字功能,可以直接向服务器发送HTTP请求,而无需curlwget

发送GET请求

以下脚本使用Bash和TCP套接字直接发送GET请求。脚本创建与目标服务器的TCP连接,构建HTTP请求,并输出响应结果。

#!/bin/bash

# 打开一个 TCP 连接到 postman-echo.com 的 80 端口,并将其分配给文件描述符 3
exec 3<>/dev/tcp/postman-echo.com/80

# 构建带有查询参数的GET请求
echo -ne "GET /get?param1=value1&param2=value2 HTTP/1.1\r\nHost: postman-echo.com\r\nConnection: close\r\n\r\n" >&3

# 从文件描述符 3 读取响应并输出到标准输出
cat <&3

# 关闭文件描述符 3
exec 3<&-

该脚本通过TCP连接发送GET请求并获取响应结果,模拟了类似curl的GET请求操作。

效果预览

当运行上面的脚本时,返回结果会类似于:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 453
Connection: close
...
{
  "args": {
    "param1": "value1",
    "param2": "value2"
  },
  ...
}

POST请求

同样的,通过Bash脚本我们也可以发送POST请求。

#!/bin/bash

# 打开一个 TCP 连接到 postman-echo.com 的 80 端口,并将其分配给文件描述符 3
exec 3<>/dev/tcp/postman-echo.com/80

# POST 数据
data="param1=value1&param2=value2"

# 构建 HTTP 请求并发送到文件描述符 3
echo -ne "POST /post HTTP/1.1\r\n" >&3
echo -ne "Host: postman-echo.com\r\n" >&3
echo -ne "Content-Type: application/x-www-form-urlencoded\r\n" >&3
echo -ne "Content-Length: ${#data}\r\n" >&3
echo -ne "Connection: close\r\n\r\n" >&3
echo -ne "$data" >&3

# 从文件描述符 3 读取响应并输出到标准输出
cat <&3

# 关闭文件描述符 3
exec 3<&-

此脚本发送POST请求并输出返回的结果,类似于使用curl -d的效果。

效果预览

运行POST请求脚本后的返回数据:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 453
Connection: close
...
{
  "data": {
    "param1": "value1",
    "param2": "value2"
  },
  ...
}

方案二

除了Bash脚本,telnet也是另一种无需curlwget的发送请求方式。telnet允许你与目标服务器的任意端口进行通信,模拟HTTP请求发送。

使用telnet发送GET请求

  1. 1. 通过以下命令连接服务器:

    telnet postman-echo.com 80
  2. 2. 在连接建立后,手动输入以下内容,并按下两次 Enter 键:

    GET /get?param1=value1&param2=value2 HTTP/1.1
    Host: postman-echo.com
    Connection: close

效果预览

如下图所示,通过telnet手动发送GET请求后,服务器返回了HTTP响应结果:

通过以上方法在没有curlwget的Linux环境中,你依然可以通过Bash脚本或者telnet来发送HTTP请求。Bash可以通过TCP套接字发送GET和POST请求,telnet可以手动模拟HTTP请求。这些方法为那些无法访问网络的环境提供了灵活的替代方案。


编程与架构
专注于Java、大数据、AI以及开发运维技术的深入探索与分享。作为一名开源爱好者,致力于分享实战经验和前沿技术动态,帮助更多技术人提升技能。
 最新文章