BASH - 将CURL命令拆分为多行

时间:2018-02-02 10:03:32

标签: bash curl

我有一个工作的curl命令,我想拆分它以便于阅读。

curl d "valuea=1234&valueb=4567&valuec=87979&submit=Set" -XPOST "http://$ipa/school.cgi" > /dev/null

我已经尝试了几种方法来做到这一点,但似乎都没有。

curl -d "valuea=1234"\
     -d "valueb=4567"\
     -d "valuec=87979"\
     -d "submit=Set"\
 -XPOST "http://$ipa/school.cgi"

curl -d "valuea=1234\
         valueb=4567\
         valuec=87979\
         submit=Set"\
 -XPOST "http://$ipa/school.cgi"

有人可以建议怎么做吗?

由于

2 个答案:

答案 0 :(得分:2)

第一种方法是正确的,我在一些修剪空白的环境中在多行上传播命令时遇到了问题,因此在反斜杠之前添加一个空格是个好主意:

url -d "valuea=1234" \
    -d "valueb=4567" \
    -d "valuec=87979" \
    -d "submit=Set" \
 -XPOST "http://$ipa/school.cgi"

最终尝试对付一个简单的服务,它将通知您正在接收的内容,例如:

// echorequest.js
const http = require('http');

const hostname = '0.0.0.0';
const port = 3001;

const server = http.createServer((req, res) => {
  console.log(`\n${req.method} ${req.url}`);
  console.log(req.headers);

  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');

  let data = '';

  req.on('data', function(chunk) {
    data += chunk
  });

  req.on('end', function() {
    console.log('BODY: ' + data);
    res.end(data + "\n");
  });
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

...由node echorequest.js运行(&更改命令的目标:-XPOST "localhost:3001"

答案 1 :(得分:0)

第二种方法也可以通过添加缺失的'&'来实现。

例如

POST:

curl http://url -d \
"valuea=1234&\
valueb=4567&\
valuec=87979&\
submit=Set"

GET:

curl "http://url?valuea=1234&\
valueb=4567&\
valuec=87979&\
submit=Set"

如果您需要即时测试请求的服务,请尝试https://requestbin.fullcontact.com/