首页 > 解决方案 > “string”参数必须是 string、Buffer 或 ArrayBuffer 类型之一。接收到的类型对象

问题描述

我一直在尝试通过 2captcha API 发送此请求,但问题是每次我通过 VIA 代码发送它时都会给我错误:[ERR_INVALID_ARG_TYPE]:“字符串”参数必须是字符串、缓冲区或 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

标签: javascriptrequestxmlhttprequest

解决方案


看起来您正在使用的特定 XMLHttpRequest 库不支持 FormData 对象。请参阅此错误报告。总的来说,看起来这个库已经有一段时间没有更新了。如果不是太难(我不知道这个旧库在您的项目中的根深蒂固),但我建议切换到更现代的解决方案,如 node-fetch,它使用更新、更易于使用的fetch API。这个node-fetch包将提供对 node.js 的支持。

解决当前问题的一种解决方案是使用URLSearchParams,它可以让您以所需的相同格式对数据进行编码,共享与 FormData 类似的 API,但也具有 toString 函数。你的错误信息说这个库支持字符串,所以你可以传入一个字符串化的值。

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


推荐阅读