Php Nodejs中的CURLOPT_POSTFIELDS

Php Nodejs中的CURLOPT_POSTFIELDS,php,node.js,request,http-post,Php,Node.js,Request,Http Post,有一个php脚本: $host = API_HOST."/getawb"; $username = USERNAME; $curl_parameters['order_ids'] = array(); $curl_options = array( CURLOPT_URL => $host, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($curl_para

有一个php脚本:

$host = API_HOST."/getawb";
$username = USERNAME;

$curl_parameters['order_ids'] = array();

$curl_options = array(
    CURLOPT_URL => $host,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query($curl_parameters),
    CURLOPT_HTTP_VERSION => 1.0,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => "$username",
    CURLOPT_HEADER => false
  );

$curl = curl_init();
curl_setopt_array($curl, $curl_options);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
我尝试使用Nodejs连接到服务器,但无法使用http请求发布数据。 我总是遇到以下错误:

“登录状态代码:200
警告:内爆():在第316行的/www/wwwroot/ldtapi.plgfutar.hu/dashboard.php中传递的参数无效

警告:为第321行/www/wwwroot/ldtapi.plgfutar.hu/dashboard.php中的foreach()提供的参数无效
{“结果”:“成功”,“事件”:“getawb”,“消息”:[]}”

我的代码如下:

function getAwb() {         
  
  const url = `${protocol}//${host}${getawbpath}`

  const data = JSON.stringify({
    order_ids: '97621'
  });

  const options = {              
    mehod: 'POST',                                             
    auth: username,
    CURLOPT_POSTFIELDS: data
  };

  const req = http.request(url, options, (res) => {               
    console.log('Login statusCode:', res.statusCode);
          
    res.on('data', (d) => {                       
        process.stdout.write(d);
      });

    res.on("error", (err) => {
      reject(err);
    });
  });                                           

  req.write(data);

  req.on('error', (e) => {
  console.error(e);
  });

  req.end();

getAwb();
我的代码怎么了?如何将数据发布到服务器以获得所需的响应?

我看到的问题:

  • 您是如何结束混合使用PHP和nodejs选项的? (CURLOPT_POSTFIELDS是一个php选项) 您需要阅读文档以找到合适的选项。 (参见下面的示例)

  • http\u build\u查询返回查询字符串。在nodejs示例中,向服务器发送一个不同的json负载。如果这是服务器所期望的,则需要生成查询字符串

从这里我得到了这个应该可以工作的示例代码() 这里还有一些:


curl与这些错误有什么关系?他们非常明确PHP代码的错误,他们甚至给你一个行号来查看。至于JS,为什么您认为
CURLOPT_POSTFIELDS
是该方法参数的有效属性名?谢谢您的回复。我尝试了你的建议,但直到得到相同的错误代码。我应该在第316行看到php的相关行:/www/wwwroot/ldtapi.plgfutar.hu/dashboard.php吗?当然,但是如何保存?我的js文件包含140行。同时,也许我发现了问题,但仍然无法解决。因此,PHP示例请求一个数组,然后使用http_build_查询转换该数组。如何在node中解决它?现在我知道数组在JS中看起来不同了,尤其是PHP数组在JS中看起来像对象。但是服务器仍然无法理解发送的对象。我编辑了我的答案。看起来您没有推送正确的数据。它与nodejs代码中的{order_id:'97621'}不同。它是{order_-id:['97621']}并且查询字符串化:order_-id[0]=97621I尝试发送所有变量,但仍然失败。'order_-id[0]=97621'和'order_-id%5B0%5D=97621'和{order_-id:['97621']}和['order_-id[0]=97621']。对于最后两个变体,我得到了一个新的错误id“ERR\u INVALID\u ARG\u TYPE”。有没有进一步的解决办法?
// query string generation in php
$data = array(
    'foo' => 'bar',
    'baz' => 'boom',
);
echo http_build_query($data) . "\n";
// foo=bar&baz=boom
$curl_parameters['order_ids'] = array(12);
http_build_query($curl_parameters);
// shows : order_ids%5B0%5D=12
const https = require('https')

const data = 'order_ids%5B0%5D=12'

const options = {
  hostname: host,
  auth: username
  port: 443,
  path: getawbpath,
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
}

const req = https.request(options, res => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(data)
req.end()