如何解决http报错2300023
=================

#### 问题现象

http执行request报错：2300023 Failed writing received data to disk/application。

*   场景1：使用http下载图片、视频等大文件报错。
*   场景2：封装http单例工具类，并发执行请求报错。
    
    private httpRequest: http.HttpRequest | null = null;
    _// ..._
    this.httpRequest = http.createHttp();
    _// ..._
    _// 发送请求_
    const response = await this.httpRequest.request(fullUrl, requestOptions);
    

#### 背景知识

[2300023](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-net-http#section2300023-向磁盘应用程序写入接收数据失败)：向磁盘/应用程序写入接收数据失败。

#### 问题定位

按照2300023错误码可能原因，重点从两方面排查：

1.  检查远端服务器资源，判断文件大小是否大于5M，并使用小文件下载测试是否复现问题。
2.  检查是否异常调用[destroy](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#destroy)销毁导致接收数据不完整。
    *   全局搜索destroy并注释代码，测试请求是否正常。
    *   检查请求实例是否被重新赋值，或复用同一个请求，导致系统自动销毁未完成的请求。使用let newHttp = http.createHttp()创建新的变量及实例发起请求，未复现问题。

#### 分析结论

1.  下载大文件时未定义[HttpRequestOptions](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#httprequestoptions)请求设置中的maxLimit参数，超出默认限制导致下载失败，限制信息可参考[request](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#request)说明。
2.  实现工具类时，HttpRequest实例不可复用。

#### 修改建议

*   对于下载大文件导致的报错，参考[http请求传输大于5M文件报错2300023](https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-network-64)或参考[应用文件上传下载](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-file-upload-download)使用request.downloadFile下载。
*   不要复用HttpRequest实例，创建一个HttpRequest实例并赋值给一个新的变量执行请求，避免前一个实例请求未接收便被销毁。