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

#### 问题现象

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

问题代码示例参考如下：

```
const sessionConfig: rcp.SessionConfiguration = {

  // 设置会话中URL的基地址
  baseAddress: '',
  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的前面。

例如:

```
"" // ""为基地址，"?name=value"为请求url。
```

#### 问题定位

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

#### 分析结论

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

#### 修改建议

修改方式有两种：

1.  将baseAddress设置为：baseAddress:""，请求url设置为："appservice/post"。
2.  将baseAddress设置为：baseAddress:""，请求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表示资源未找到，建议使用抓包工具排查下哪个接口出现问题。