如何在不使用 CURL 的情况下运行 HTTP 请求

如何在不使用 CURL 的情况下运行 HTTP 请求

我有基于 ARM cpu 的 BusyBox v1.8.1(嵌入式 Linux),二进制文件有限。如何在不使用curl的情况下进行http post或put?我有 wget 可用:

# wget
BusyBox v1.8.1 (2015-04-06 16:22:12 IDT) multi-call binary

Usage: wget [-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document file]
        [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]
        [-U|--user-agent agent] url

Retrieve files via HTTP or FTP

Options:
        -s      Spider mode - only check file existence
        -c      Continue retrieval of aborted transfer
        -q      Quiet
        -P      Set directory prefix to DIR
        -O      Save to filename ('-' for stdout)
        -U      Adjust 'User-Agent' field
        -Y      Use proxy ('on' or 'off')

CPU信息...

# cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 1 (v5l)

答案1

很大程度上取决于您的 busybox 和其他命令中的内容。我觉得你的limitedwget不能用;然而,一个简单的POST 请求可以仅使用 a 来模拟cat,前提是您可以打开套接字,例如使用nc (netcat, socat), telnet,甚至使用完整版本的bash,因为它可以进行连接,如下所示:

在另一台机器上,用于curl执行请求,并复制它写入的所有数据。例如:

curl --trace-ascii - -0 -d var=val http://localhost/~meuh/dump.cgi

这显示在它发送的curl 跟踪输出中:

POST /~meuh/dump.cgi HTTP/1.0
User-Agent: curl/7.37.0
Host: localhost
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded

var=val

如果将其放入文件中,则可以重现 POST,例如使用 bash 脚本进行 google:

#!/bin/bash
exec 5<>/dev/tcp/www.google.com/80
cat mypostfile >&5
cat <&5 # reply

\r\n这可能只适用于小数据和对行结尾不太挑剔的服务器,但可能足以满足您的需要。

答案2

许多工具可以netcat在 Buildroot (http://buildroot.uclibc.org/),然后下载到wget设备上使用。这就是我在类似情况下所做的。

只需设置正确的选项,您就可以使用 访问它们make menuconfig。以下选项页面可能对您来说是最重要的(我使用 with 标记了通常重要的选项!>):

  • 目标
  │ ┌──────────────────────────────────────────────── ────────────────────────────┐ │  
!>│ │ 目标架构 (FOOBAR) ---> │ │  
  │ │ 目标二进制格式 (ELF) ---> │ │  
!>│ │ 目标架构变体 (Gen42) ---> │ │  
  │ │ 目标 ABI (EABI) ---> │ │  
  │ │ 浮点策略(软浮点) ---> │ │  
  │ │ │ │  
  • 构建选项
!> │ │ 库(仅限静态) ---> │ │  
  │ │ ($(CONFIG_DIR)/local.mk) 包覆盖文件的位置 │ │  
  │ │ () 全局补丁目录 │ │  
  │ │ 高级 ---> │ │  
  │ └──────────────────────────────────────────────── ────────────────────────────┘
  • 工具链
  │ ┌──────────────────────────────────────────────── ────────────────────────────┐ │  
  │ │ 工具链类型(Buildroot 工具链) ---> │ │  
  │ │ (buildroot) 自定义工具链供应商名称 │ │  
  │ │ *** 内核头选项 *** │ │  
!>│ │ 内核头文件(手动指定的 Linux 版本) ---> │ │  
!>│ │ (2.6.99) Linux 版本 │ │  
!>│ │ 自定义内核头文件系列 (2.6.x) ---> │ │  
  │ │ C 库 (uClibc) ---> │ │  
  │ │ *** uClibc 选项 *** │ │  
!>│ │ uClibc C 库版本 (uClibc 0.9.33.x) ---> │ │  

make toolchain然后使用您需要的工具构建工具链,例如make nc

相关内容