11

我正在编写一个 bash 脚本,在其中尝试提交一个 post 变量,但是 wget 将其视为多个 URL,我相信因为它不是 URLENCODED ......这是我的基本想法

MESSAGE='I am trying to post this information'
wget -O test.txt http://xxxxxxxxx.com/alert.php --post-data 'key=xxxx&message='$MESSAGE''

我收到错误,alert.php 没有得到 post 变量,而且它在说

无法解决我无法解决我无法解决尝试..等等。

我上面的示例是一个简单的 sudo 示例,但我相信如果我可以对其进行 url 编码,它会通过,我什至尝试过 php,例如:

MESSAGE='I am trying to post this information'
MESSAGE=$(php -r 'echo urlencode("'$MESSAGE'");')

但php错误..有什么想法吗?如何在不执行 php 的情况下传递 $MESSAGE 中的变量?

4

3 回答 3

16

在 CentOS 上,不需要额外的软件包:

python -c "import urllib;print urllib.quote(raw_input())" <<< "$message"
于 2017-02-09T08:10:57.667 回答
10

您希望$MESSAGE使用双引号,因此 shell 不会将其拆分为单独的单词,然后将其作为参数传递给 PHP:

ENCODEDMESSAGE="$(php -r 'echo rawurlencode($argv[1]);' -- "$MESSAGE")"
于 2012-08-09T03:39:40.487 回答
5

扩展Rockallite 对 Python 3 和来自文件的多行输入非常有用的答案(这次是在 Ubuntu 上,但这不重要):

cat any.txt | python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.stdin.read()))"

这将导致文件中的所有行连接成一个 URL,换行符被替换为%0A.

于 2019-05-27T07:54:12.000 回答