最近搞若快的打码平台对接,目前利用的是javascript脚本调用系统组件来实现验证码图片转发的。
设想的是通过WINHTTP.WINHTTPREQUEST.5.1访问验证码图片并且转发提交给若快的api接口,然后若快接口返回相关信息。
编写的过程中发现,因为接口接受的POST参数包含图片的字节信息和其他表单参数,但是js字符串不容易转换为字节流,而且最终要合并为一个流来提交,参考了下官方的几个例子,最终解决,下面贴一下主要函数。
将js里字符串(string类型) 通过 ADODB.Stream 转换为 字节流
function StringToBytes(strData){
strCharset="UTF-8";
var objFile = new ActiveXObject("ADODB.Stream");
objFile.Type = 2;
objFile.Charset = strCharset;
objFile.Open();
objFile.WriteText(strData);
objFile.Position = 0;
objFile.Type = 1;
if (strCharset == "UNICODE"){
objFile.Position = 2;
}else if(strCharset == "UTF-8"){
objFile.Position = 3;
}
var strbytes=objFile.Read(-1);
objFile.Close();
objFile=null;
return strbytes;
}
其实有了上面的函数,合并为一个流就简单多了。
stream = new ActiveXObject(‘ADODB.Stream’);
stream.Type = 1;
stream.Mode = 3;
stream.Open();
stream.Write(StringToBytes(spostdata));
stream.Write(oxhr.responseBody);
stream.Write(StringToBytes("\r\n\r\n—————————–8d070bdf16538b4–"));
stream.Position = 0; // 这里需要重新定位到0 否则post数据为空。
spostdata = stream; // 提交的 post 数据 直接 winhttp 发送就好
受教了!呵呵!