Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用wget发送URL编码的POST请求_Bash_Curl_Post_Wget - Fatal编程技术网

Bash 使用wget发送URL编码的POST请求

Bash 使用wget发送URL编码的POST请求,bash,curl,post,wget,Bash,Curl,Post,Wget,以下curl将发送带有url参数的POST请求,该参数将自动进行urlencoded: u="url=http://somewhere.net?param1=val1&param2=val2" curl -XPOST --data-urlencode "$u" http://example.com 但是,我需要从一个没有 curl已安装 有没有办法通过wget达到同样的效果?$u是否可以由wget或其他可能安装在最小linux上的程序自动进行URL编码?正如@Roadowl的评论所建议

以下
curl
将发送带有
url
参数的
POST
请求,该参数将自动进行urlencoded:

u="url=http://somewhere.net?param1=val1&param2=val2"
curl -XPOST --data-urlencode "$u" http://example.com
但是,我需要从一个没有
curl
已安装


有没有办法通过
wget
达到同样的效果?
$u
是否可以由
wget
或其他可能安装在最小linux上的程序自动进行URL编码?

正如@Roadowl的评论所建议的,bash本身可以对数据进行URL编码,wget调用可能如下

wget --post-data=$(printf "url="; urlencode $u) http://example.com
使用来自的urlencode实现

urlencode(){
#URL编码
old_lc_collate=$lc_collate
LC_COLLATE=C
局部长度=“${1}”
for((i=0;i
。。不过,如果bash不喜欢空字节,并且可能不允许在变量中使用空字节,那么可能无法使用空字节

urlencode() {
    # urlencode <string>
    old_lc_collate=$LC_COLLATE
    LC_COLLATE=C

    local length="${#1}"
    for (( i = 0; i < length; i++ )); do
        local c="${1:i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) printf "$c" ;;
            *) printf '%%%02X' "'$c" ;;
        esac
    done

    LC_COLLATE=$old_lc_collate
}