暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

编程与架构 2024-10-15
451

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

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

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


方案一

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

发送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
也是另一种无需curl
wget
的发送请求方式。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响应结果:

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


文章转载自编程与架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论