我有基于 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
。