鱼C论坛

 找回密码
 立即注册
查看: 6792|回复: 13

[已解决]NODE 发送POST请求 模拟金山词霸,实在没办法了

[复制链接]
发表于 2021-6-22 22:22:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. var rp=require("sync-request");   
  2. var crypto = require('crypto');
  3. var querystr = require('querystring');

  4. var url="https://ifanyi.iciba.com/index.php?";
  5. var q="cat";
  6. var key="6key_cibaifanyicjbysdlove1"+q;
  7. var rmd5 = crypto.createHash('md5').update(key).digest("hex");
  8. var data={
  9.     'from': "en",
  10.     'to': 'zh',
  11.     'q': q
  12.     };
  13. var postdata=querystr.stringify(data);   
  14. var contentLen = Buffer.byteLength(postdata, 'utf8');     
  15. var headers={
  16.     'Content-Length': contentLen,
  17.     'Content-Type': 'application/x-www-form-urlencoded',
  18.     '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',
  19. };

  20. url+=querystr.stringify({'c': 'trans',
  21. 'm': 'fy',
  22. 'client': '6',
  23. 'auth_user': 'key_ciba',
  24. 'sign': rmd5.substring(0,16)});   
  25. var resp=rp("post",url,headers=headers,json=data);
  26. console.log(resp.getBody('utf8'));
  27. console.log(headers["Content-Length"]);
  28. console.log(data);
  29. console.log(url);
  30. /*
  31.      PS D:\wp> node jinshan.js
  32.         {"error_code":10005,"message":"auth failed"}
  33.         19
  34.         { from: 'en', to: 'zh', q: 'cat' }
  35.         https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_ciba&sign=4eaf39c9397e1ba9
  36. */
复制代码


里面各种接口数据 都和抓包里面的一致,但是就是无情的返回   auth failed
以为是算法发生变化了,使用python运行差不多一致的源码   ok 没问题
鉴于这个网站既有post 请求 还有url拼接   我又特意写了个demo  然后再我自己demo上运行上面类似代码  也能拿到数据
最佳答案
2021-7-6 16:41:17
  1. const { createInterface } = require("readline")
  2. const axios = require('axios').default
  3. const crypto = require('crypto')
  4. const url = "https://ifanyi.iciba.com/index.php?"

  5. const input = question => {
  6.     return new Promise((resolve, reject) => {
  7.         const readline = createInterface({
  8.             input: process.stdin,
  9.             output: process.stdout
  10.         })
  11.         readline.question(question, input => {
  12.             input ? resolve(input) : reject()
  13.             readline.close()
  14.         })
  15.     })
  16. }

  17. const main = async () => {
  18.     let q
  19.     try {
  20.         q = await input(`请输入你要翻译的单词::`)
  21.     } catch (err) {
  22.         console.log(`无输入,结束程序`)
  23.         return
  24.     }
  25.     const key = "6key_cibaifanyicjbysdlove1" + q
  26.     const sign = crypto.createHash('md5').update(key).digest("hex").substring(0, 16)
  27.     const data = new URLSearchParams()
  28.     data.set('from', "auto")
  29.     data.set('to', 'auto')
  30.     data.set('q', q)
  31.     const headers = {
  32.         'Content-Type': 'application/x-www-form-urlencoded',
  33.         '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'
  34.     }
  35.     try {
  36.         resp = await axios.post(url, data.toString(), {
  37.             'headers': headers,
  38.             'params': {
  39.                 'c': 'trans',
  40.                 'm': 'fy',
  41.                 'client': 6,
  42.                 'auth_user': 'key_ciba',
  43.                 'sign': sign
  44.             }
  45.         })
  46.         console.log(resp.data["content"]["out"])
  47.     } catch (err) {
  48.         console.log(`请求失败:${err}`)
  49.     }
  50. }

  51. main()
复制代码


结账 老哥

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-6 14:37:35 | 显示全部楼层
好久没上网   解决了没
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-6 14:39:57 | 显示全部楼层
kogawananari 发表于 2021-7-6 14:37
好久没上网   解决了没

没有,python可以拿到数据  node 就是拿不到数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 14:50:12 | 显示全部楼层
wp231957 发表于 2021-7-6 14:39
没有,python可以拿到数据  node 就是拿不到数据

发一下python的我试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-6 15:02:39 | 显示全部楼层
kogawananari 发表于 2021-7-6 14:50
发一下python的我试试

https://fishc.com.cn/thread-197609-1-1.html
我刚测试了一下,,英译汉  还是汉译英  都是能用的   
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 16:41:17 | 显示全部楼层    本楼为最佳答案   
  1. const { createInterface } = require("readline")
  2. const axios = require('axios').default
  3. const crypto = require('crypto')
  4. const url = "https://ifanyi.iciba.com/index.php?"

  5. const input = question => {
  6.     return new Promise((resolve, reject) => {
  7.         const readline = createInterface({
  8.             input: process.stdin,
  9.             output: process.stdout
  10.         })
  11.         readline.question(question, input => {
  12.             input ? resolve(input) : reject()
  13.             readline.close()
  14.         })
  15.     })
  16. }

  17. const main = async () => {
  18.     let q
  19.     try {
  20.         q = await input(`请输入你要翻译的单词::`)
  21.     } catch (err) {
  22.         console.log(`无输入,结束程序`)
  23.         return
  24.     }
  25.     const key = "6key_cibaifanyicjbysdlove1" + q
  26.     const sign = crypto.createHash('md5').update(key).digest("hex").substring(0, 16)
  27.     const data = new URLSearchParams()
  28.     data.set('from', "auto")
  29.     data.set('to', 'auto')
  30.     data.set('q', q)
  31.     const headers = {
  32.         'Content-Type': 'application/x-www-form-urlencoded',
  33.         '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'
  34.     }
  35.     try {
  36.         resp = await axios.post(url, data.toString(), {
  37.             'headers': headers,
  38.             'params': {
  39.                 'c': 'trans',
  40.                 'm': 'fy',
  41.                 'client': 6,
  42.                 'auth_user': 'key_ciba',
  43.                 'sign': sign
  44.             }
  45.         })
  46.         console.log(resp.data["content"]["out"])
  47.     } catch (err) {
  48.         console.log(`请求失败:${err}`)
  49.     }
  50. }

  51. main()
复制代码


结账 老哥

评分

参与人数 1鱼币 +1 收起 理由
高山 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 16:53:18 | 显示全部楼层
node这边 data参数 不能传object  因为object=json   得传 URLSearchParams.toString  

python那边参数还分data= 和 json=  所以不需要
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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");    还是不行呢
  1. var rp=require("sync-request");   
  2. var crypto = require('crypto');

  3. var url="https://ifanyi.iciba.com/index.php?";
  4. var q="cat";
  5. var key="6key_cibaifanyicjbysdlove1"+q;
  6. var rmd5 = crypto.createHash('md5').update(key).digest("hex");
  7. const data = new URLSearchParams();
  8. data.set('from', "auto")
  9. data.set('to', 'auto')
  10. data.set('q', q)
  11. var headers={
  12.     'Content-Type': 'application/x-www-form-urlencoded',
  13.     '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',
  14. };

  15. var params={
  16.     'c': 'trans',
  17.     'm': 'fy',
  18.     'client': '6',
  19.     'auth_user': 'key_ciba',
  20.     'sign': rmd5.substring(0,16)
  21. }
  22.         
  23. var resp=rp("post",url,data.toString(),{headers:headers,params:params});
  24. console.log(resp.getBody('utf8'));
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 19:41:22 | 显示全部楼层
wp231957 发表于 2021-7-6 18:35
必须要用axios这个模块吗
我用var rp=require("sync-request");    还是不行呢

我只会axios  别的没用过

还有,用node居然不用异步也太奇怪了吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-6 19:54:00 From FishC Mobile | 显示全部楼层
kogawananari 发表于 2021-7-6 19:41
我只会axios  别的没用过

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

受python的影响,我还不太了解异步机制
我脑海中的脚本执行顺序就是从头到尾
可是异步好像不是这样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我上面写的代码也是从头到尾执行  
虽然是异步 但只要await了就会卡在那里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

node和python的await实现方式都是yield  
但是py的asyncio模块更难用 不符合常理 开始执行但不等待  node的await阻塞的执行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-19 13:18:27 From FishC Mobile | 显示全部楼层
你好,我用python写了一段代码也报这个错能帮我看一下嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-19 14:11:49 From FishC Mobile | 显示全部楼层
yangyang15 发表于 2021-7-19 13:18
你好,我用python写了一段代码也报这个错能帮我看一下嘛

代码呢???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表