BASH - 将CURL命令拆分为多行

3

我有一个可用的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个回答

4

第一种方法是正确的,我曾在某些会去除空格的环境中遇到过多行命令传播的问题,因此在反斜杠前添加一个空格是一个好主意:

curl -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”


谢谢,那真是太有帮助了。 - Tom

0

第二种方法也可以通过添加缺失的“&”来解决。

例如

POST:

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

获取:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接