“string”参数必须是 string、Buffer 或 ArrayBuffer 类型之一接收类型对象

问题描述

我一直在尝试通过 2captcha API 发送此请求,但问题是每次我通过代码发送它时都会出现错误: [ERR_INVALID_ARG_TYPE]:“字符串”参数必须是字符串、Buffer 或 ArrayBuffer 类型之一。接收类型对象

任何帮助都会得到极大的帮助,我一直在尝试不同的东西,但似乎无法发送此请求。

var FormData = require('form-data');
var fs = require('fs');
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

const data = new FormData();
data.append("key","96000001977a12e50ca4eb45f104fe1");
data.append("file","file");
data.append("submit","00000W0UAAAAAA-ouoKHOnWuQDNymSwDFYeGP300");

const xhr = new XMLHttpRequest();
xhr.withCredentials = true; 

xhr.addEventListener("readystatechange",function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST","http://2captcha.com/in.PHP?key=962800000a12e50ca4eb45f104fe1&method=userrecaptcha&googlekey=000000UAAAAAA-ouoKHOnWuQDNymSwDFYeG00000&pageurl=https://www.google.com/recaptcha/api2/demo");
xhr.send(data); //problem area

解决方法

看起来您使用的特定 XMLHttpRequest 库不支持 FormData 对象。见this bug report。一般来说,这个库似乎有一段时间没有更新了。如果不是太难(我不知道这个旧库在您的项目中的根深蒂固)但我建议切换到更现代的解决方案,例如 node-fetch,它使用更新、更易于使用的 {{3} }.此 fetch API 包将为节点提供该支持。

解决您当前问题的一种解决方案是使用 node-fetch,它可以让您以所需的相同格式对数据进行编码,与 FormData 共享类似的 API,但还有一个 toString 函数。您的错误消息表明该库支持字符串,因此您只需传入一个字符串化值即可。

const data = new URLSearchParams();
data.append("key","xxx");
data.append("file","file");
data.append("submit","yyy");
console.log(data.toString())