请求融云API接口时的参数问题:errorMessage:“The parameter userId is required.“,code: 1002

技术:Vue+TypeScript+axios
机翻“The parameter userId is required.”:参数userId是必需的

↓我明明传了参数的 (我启用了proxy接口代理防止出现跨域,"/im/***"会被代理到"http://api-cn.ronghub.com/***")

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);
    const res = (await axios.post(`/im/user/info.json`, {userId: uid})).data;
    if(res?.code===200){
      
    }
  }

代码中的Sha1方法是我复制的别人的代码然后引入使用的(我用的ts,所以要在这个方法内报警告的变量或参数后面添加:any,如 var str:any = '字符串'; 或者((item:any) => {  })),博客地址:https://blog.csdn.net/qq_40147863/article/details/88034357

AppKey和AppSecret:

 

AppKey和AppSecret是从融云拿的,定义在保存常量的文件里(utils/constant),引入常量然后再使用就行,不想定义常量也可以在Vue的代码外面直接用var定义↓

明明传了参数却硬是说我没传, 于是我开始在网上搜索“后端拿不到post请求的参数”
然后就添加了一行代码

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);

    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8;';

    const res = (await axios.post(`/im/user/info.json`,{userId: uid})).data;
    if(res?.code===200){
      
    }
  }

但还是不行
于是在网上搜了半天后又改了下代码,使用qs.stringify对参数进行了处理,然后接口总算调用成功了

qs在安装axios的时候会一起安装,只要用“ import qs from 'qs'; ”引入就行,上面介绍AppKey和AppSecret的图里就有引入qs的代码

private async getUserData(uid:string):Promise<void>{
    var nonce = '123';
    var date = new Date().getTime();
    axios.defaults.headers.post['RC-App-Key'] = AppKey;
    axios.defaults.headers.post['RC-Nonce'] = nonce;
    axios.defaults.headers.post['RC-Timestamp'] = date;
    axios.defaults.headers.post['RC-Signature'] = Sha1(AppSecret+nonce+date);
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8;';
    const res = (await axios.post(`/im/user/info.json`, qs.stringify({userId: uid}))).data;
    if(res?.code===200){
      
    }
  }

 可以看到修改了以后,接口参数处的Request Payload变成了Form Data

总结(在其它代码符合融云官方文档规范的情况下):
1.设置请求头的'Content-Type'为'application/x-www-form-urlencoded;charset=utf-8;'

2.使用qs.stringify对接口参数进行处理

根据引用和引用,错误信息"TypeError: a bytes-like object is required, not 'str'"表示在Python 3.5中,需要传入一个字节对象(bytes-like object),而不是一个字符串对象(str)。这可能是因为你在使用某个函数或方法,传入的参数类型错误导致的。 根据引用,错误信息"test_1.py: error: the following arguments are required: aaa"表示在运行test_1.py脚本,需要提供一个名为aaa的参数,但你没有提供这个参数。 而根据问题中的错误信息"apipost中{ "code": 1, "error": "Object is required." }",这是一个来自apipost的错误信息,表示需要一个对象作为参数,但你没有提供。 要解决这些问题,你可以检查你的代码并确保传入正确的参数类型和提供必要的参数。根据具体情况,你可能需要将字符串转换为字节对象,或者提供缺少的参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python 3.5: TypeError: a bytes-like object is required, not 'str'](https://blog.csdn.net/kkwant/article/details/81455409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python args parse_args() 报错 xxx.py: error: the following arguments are required: xxx](https://blog.csdn.net/qxqxqzzz/article/details/100558953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值