wp231957 发表于 2021-6-22 22:22:40

NODE 发送POST请求 模拟金山词霸,实在没办法了

var rp=require("sync-request");   
var crypto = require('crypto');
var querystr = require('querystring');

var url="https://ifanyi.iciba.com/index.php?";
var q="cat";
var key="6key_cibaifanyicjbysdlove1"+q;
var rmd5 = crypto.createHash('md5').update(key).digest("hex");
var data={
    'from': "en",
    'to': 'zh',
    'q': q
    };
var postdata=querystr.stringify(data);   
var contentLen = Buffer.byteLength(postdata, 'utf8');   
var headers={
    'Content-Length': contentLen,
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
};

url+=querystr.stringify({'c': 'trans',
'm': 'fy',
'client': '6',
'auth_user': 'key_ciba',
'sign': rmd5.substring(0,16)});   
var resp=rp("post",url,headers=headers,json=data);
console.log(resp.getBody('utf8'));
console.log(headers["Content-Length"]);
console.log(data);
console.log(url);
/*
   PS D:\wp> node jinshan.js
      {"error_code":10005,"message":"auth failed"}
      19
      { from: 'en', to: 'zh', q: 'cat' }
      https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba&sign=4eaf39c9397e1ba9
*/

里面各种接口数据 都和抓包里面的一致,但是就是无情的返回 auth failed
以为是算法发生变化了,使用python运行差不多一致的源码   ok 没问题
鉴于这个网站既有post 请求 还有url拼接   我又特意写了个demo然后再我自己demo上运行上面类似代码也能拿到数据

kogawananari 发表于 2021-7-6 14:37:35

好久没上网   解决了没{:10_292:}

wp231957 发表于 2021-7-6 14:39:57

kogawananari 发表于 2021-7-6 14:37
好久没上网   解决了没

没有,python可以拿到数据node 就是拿不到数据

kogawananari 发表于 2021-7-6 14:50:12

wp231957 发表于 2021-7-6 14:39
没有,python可以拿到数据node 就是拿不到数据

发一下python的我试试{:10_294:}

wp231957 发表于 2021-7-6 15:02:39

kogawananari 发表于 2021-7-6 14:50
发一下python的我试试

https://fishc.com.cn/thread-197609-1-1.html
我刚测试了一下,,英译汉还是汉译英都是能用的   
谢谢

kogawananari 发表于 2021-7-6 16:41:17

const { createInterface } = require("readline")
const axios = require('axios').default
const crypto = require('crypto')
const url = "https://ifanyi.iciba.com/index.php?"

const input = question => {
    return new Promise((resolve, reject) => {
      const readline = createInterface({
            input: process.stdin,
            output: process.stdout
      })
      readline.question(question, input => {
            input ? resolve(input) : reject()
            readline.close()
      })
    })
}

const main = async () => {
    let q
    try {
      q = await input(`请输入你要翻译的单词::`)
    } catch (err) {
      console.log(`无输入,结束程序`)
      return
    }
    const key = "6key_cibaifanyicjbysdlove1" + q
    const sign = crypto.createHash('md5').update(key).digest("hex").substring(0, 16)
    const data = new URLSearchParams()
    data.set('from', "auto")
    data.set('to', 'auto')
    data.set('q', q)
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'
    }
    try {
      resp = await axios.post(url, data.toString(), {
            'headers': headers,
            'params': {
                'c': 'trans',
                'm': 'fy',
                'client': 6,
                'auth_user': 'key_ciba',
                'sign': sign
            }
      })
      console.log(resp.data["content"]["out"])
    } catch (err) {
      console.log(`请求失败:${err}`)
    }
}

main()

结账 老哥

kogawananari 发表于 2021-7-6 16:53:18

node这边 data参数 不能传object因为object=json   得传 URLSearchParams.toString

python那边参数还分data= 和 json=所以不需要

wp231957 发表于 2021-7-6 18:35:51

kogawananari 发表于 2021-7-6 16:53
node这边 data参数 不能传object因为object=json   得传 URLSearchParams.toString

python那边参数 ...

必须要用axios这个模块吗
我用var rp=require("sync-request");    还是不行呢
var rp=require("sync-request");   
var crypto = require('crypto');

var url="https://ifanyi.iciba.com/index.php?";
var q="cat";
var key="6key_cibaifanyicjbysdlove1"+q;
var rmd5 = crypto.createHash('md5').update(key).digest("hex");
const data = new URLSearchParams();
data.set('from', "auto")
data.set('to', 'auto')
data.set('q', q)
var headers={
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
};

var params={
    'c': 'trans',
    'm': 'fy',
    'client': '6',
    'auth_user': 'key_ciba',
    'sign': rmd5.substring(0,16)
}
      
var resp=rp("post",url,data.toString(),{headers:headers,params:params});
console.log(resp.getBody('utf8'));

kogawananari 发表于 2021-7-6 19:41:22

wp231957 发表于 2021-7-6 18:35
必须要用axios这个模块吗
我用var rp=require("sync-request");    还是不行呢

我只会axios别的没用过{:10_292:}

还有,用node居然不用异步也太奇怪了吧

wp231957 发表于 2021-7-6 19:54:00

kogawananari 发表于 2021-7-6 19:41
我只会axios别的没用过

还有,用node居然不用异步也太奇怪了吧

受python的影响,我还不太了解异步机制
我脑海中的脚本执行顺序就是从头到尾
可是异步好像不是这样的

kogawananari 发表于 2021-7-6 21:29:50

wp231957 发表于 2021-7-6 19:54
受python的影响,我还不太了解异步机制
我脑海中的脚本执行顺序就是从头到尾
可是异步好像不是这样的

我上面写的代码也是从头到尾执行
虽然是异步 但只要await了就会卡在那里{:10_338:}

kogawananari 发表于 2021-7-6 21:37:20

wp231957 发表于 2021-7-6 19:54
受python的影响,我还不太了解异步机制
我脑海中的脚本执行顺序就是从头到尾
可是异步好像不是这样的

node和python的await实现方式都是yield
但是py的asyncio模块更难用 不符合常理 开始执行但不等待node的await阻塞的执行的{:10_270:}

yangyang15 发表于 2021-7-19 13:18:27

你好,我用python写了一段代码也报这个错能帮我看一下嘛

wp231957 发表于 2021-7-19 14:11:49

yangyang15 发表于 2021-7-19 13:18
你好,我用python写了一段代码也报这个错能帮我看一下嘛

代码呢???
页: [1]
查看完整版本: NODE 发送POST请求 模拟金山词霸,实在没办法了