文档管理中心

RCP网络请求报错:Syntax Error.Invalid url string

问题现象

RCP网络请求报错:Syntax Error.Invalid url string。

问题代码示例参考如下:

const sessionConfig: rcp.SessionConfiguration = {


  // 设置会话中URL的基地址
  baseAddress: 'https://xxx.com/appservice',
  requestConfiguration: {
    transfer: {
      autoRedirect: true,
      timeout: {
        connectMs: 20000, // 允许建立连接的最长时间(以毫秒为单位)
        transferMs: 20000, // 允许传输数据的最长时间(以毫秒为单位)
      },
    },
    tracing: {
      verbose: true,
    },
    security: {
      remoteValidation: 'skip' // 取消验证ssl证书
    },
  },
};


// 创建会话
const session = rcp.createSession(sessionConfig);
let req = new rcp.Request('/post', 'POST', header, params);
// 发送请求,并处理返回结果。
session.fetch(req).then((rep: rcp.Response) => {
  console.info(`Response succeeded: ${rep}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${JSON.stringify(err.code)}, message is ${JSON.stringify(err)}`);
});

背景知识

SessionConfiguration中baseAddress可以设置会话中url的基地址。这允许开发者为会话中的多个请求定义一个通用的基本url。如果请求url不是绝对url,则把基地址预制在请求url的前面。

例如:

"https://example.com?name=value" // "https://example.com"为基地址,"?name=value"为请求url。

问题定位

根据报错信息:“Syntax Error.Invalid url string”,该错误通常发生在url字符串格式不符合规范时,请检查代码中url地址格式是否正确。

分析结论

分析代码发现请求url为:"/post",其中请求url有/符号指host下的相对路径,会导致RCP请求url拼接出错。

修改建议

修改方式有两种:

  1. 将baseAddress设置为:baseAddress:"https://xxx.com",请求url设置为:"appservice/post"。
  2. 将baseAddress设置为:baseAddress:"https://xxx.com/appservice",请求url设置为:"post"。

常见FAQ

Q:使用RCP的downloadToFile下载文件,但是返回405,后端对应的接口是POST请求,如何处理?

A:downloadToFile和downloadToStream下载文件是使用的GET请求方式,uploadFromFile和uploadFromStream使用的是POST请求方式,建议后端修改下载时的请求方式。

Q:RCP接口上传下载时能带其他参数吗?

A:RCP自定义参数能力可在SessionConfiguration参数中header进行设置。

Q:在模拟器中发RCP网络请求,无法获取请求内容,且报错信息无法参考。

A:模拟器缓存的问题,重启后即可。

Q:RCP的POST请求如何传递请求参数?

A:RCP的POST请求参数可以通过RequestContent进行填充,可参考使用示例

Q:RCP网络请求失败,日志报错statusCode:404,是什么原因导致的?

A:HTTP状态码404表示资源未找到,建议使用抓包工具排查下哪个接口出现问题。

搜索
请输入您想要搜索的关键词