javascript - “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
解决方案
看起来您正在使用的特定 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())
推荐阅读
- php - Cant Figure out how to Remove characters from Sting in PHP
- php - TranslatePress plugin throwing errors after site migration to the new server
- javascript - named class expressions returning different values
- android - 如何从电话关闭系统日志
- javascript - 有没有一种方法可以在 Google 的 Materialize CSS 中创建一个垂直轮播,而无需自定义构建它?
- jquery - 如何在 Django 中配置 Select2MultipleWidget
- node.js - 运行 npm install create-react-app 时出现错误 404
- numpy - 访问张量中索引处的元素
- java - java 8顺序流有直接或间接的性能优势吗?
- javascript - Java 行 websocket 数据传输