1# 网络管理开发常见问题 2 3 4## http网络请求中extraData支持的数据格式有哪些(API 9) 5 6**解决措施** 7 8extraData代表发送请求的额外数据,支持如下数据: 9 10- 当HTTP请求为POST、PUT方法时,此字段为HTTP请求的content。 11 12- 当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。 13 14- 开发者传入string对象,开发者需要自行编码,将编码后的string传入。 15 16 17## http请求的错误码28是什么意思(API 9) 18 19**问题现象** 20 21发起http请求后报错,错误码28。 22 23**解决措施** 24 25错误码28代表CURLE_OPERATION_TIMEDOUT,操作超时。网络请求底层使用libcurl库,更多错误码可以查看相应文档。 26 27**参考链接** 28 29[http常见响应码](../reference/apis-network-kit/js-apis-http.md#responsecode)和[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) 30 31 32## http请求中response错误码返回6是什么意思(API 9) 33 34**问题现象** 35 36发起http请求后,返回信息中response错误码为6。 37 38**解决措施** 39 40错误码6表示地址无法解析主机,可以尝试ping一下request中的URL,确认是否可以ping通。 41 42**参考链接** 43 44更多错误码参考[http常见响应码](../reference/apis-network-kit/js-apis-http.md#responsecode)和[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) 45 46## \@ohos/axios三方件post请求queryParams参数场景下如何传参(API 9) 47 48**问题现象** 49 50三方件\@ohos/axios中发起post请求,以queryParams形式传递参数(将参数拼接在URL后)。 51 52**解决措施** 53 54- 方式一:使用axios.post接口只接收一个参数,Url.URLSearchParams需要转成字符串拼接在url后面。 55 56 ``` 57 let params:Url.URLSearchParams = new Url.URLSearchParams() 58 params.append('ctl', 'sug') 59 params.append('query', 'wangjunkai') 60 params.append('cfrom', '1099a') 61 axios.post('http://10.100.195.234:3000/save?' + params.toString()).then(res => { 62 this.message = "request result: " + JSON.stringify(res.data); 63 }).catch(err => { 64 this.message = "request error: " + err.message; 65 }) 66 ``` 67 68- 方式二:使用axios接口只接收一个config对象,请求参数写在config对象的params中。 69 70 ``` 71 axios({ 72 url: 'http://10.100.195.234:3000/save', 73 method: 'post', 74 params: { 75 ctl: 'sug', 76 query: 'wangjunkai', 77 cfrom: '1099a' 78 } 79 }).then(res => { 80 this.message = "request result: " + JSON.stringify(res.data); 81 }).catch(err => { 82 this.message = "request error: " + err.message; 83 }) 84 ``` 85 86 87## connection.getNetCapabilities(mNetHandle)无法正常返回结果(API 9) 88 89**问题现象** 90 91在网络连接管理中,调用connection.getNetCapabilities()函数时无法取到数据。 92 93**原因分析** 94 95this指向存在问题,用(err,data)=>{}可以进入回调函数并且拿到返回结果数据,不能使用function(err,data),因为function声明的函数内存在自己的this,无法指向全局的this。 96 97**解决措施** 98 99getNetCapabilities的第二个参数把function(err,data)改成(err,data)。 100 101 102## http请求如何以json形式进行传输(API 9) 103 104**解决措施** 105 106在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一个文本等。 107 108设置该参数值为application/json,请求中的数据就会以json形式进行传输。 109 110``` 111this.options = { 112 method: http.RequestMethod.GET, 113 extraData: this.extraData, 114 header: { 'Content-Type': 'application/json' }, 115 readTimeout: 50000, 116 connectTimeout: 50000 117} 118``` 119 120 121## 调用camera拍摄的照片如何上传到服务器(API 9) 122 123**问题现象** 124 125应用调用摄像头拍照后如何将图片上传到服务器? 126 127**解决措施** 128 129启动应用,获取权限后系统会访问远程服务器,将拍摄照片保存在本地,通过上传接口将文件从个人设备传送至远程服务器。 130 131**参考链接** 132 133[上传下载](../reference/apis-basic-services-kit/js-apis-request.md) 134 135 136## 设备网络正常,调用connection.hasDefaultNet()接口失败(API 9) 137 138**问题现象** 139 140设备可以上网,浏览器可以正常打开网页,但是hasDefaultNet这个方法调用失败,回调函数走到了失败的回调。 141 142**解决措施** 143 144connection.hasDefaultNet 接口需要注明需要权限ohos.permission.GET_NETWORK_INFO 145 146权限申请链接:[声明权限](../security/AccessToken/declare-permissions.md) 147 148 149## 如何理解connection.getDefaultNet返回对象netHandle中的netId(API 9) 150 151**问题现象** 152 153netId的值如0、100分别代表什么含义? 154 155**解决措施** 156 157正常情况下,netHandle里的netId为0时表示没联网,大于等于100时为有网状态。 158 159 160## 如何使用http请求从网络上获取数据(API 9) 161 162**解决措施** 163 164使用\@ohos.net.http模块来发起http网络请求。 165 1661. 导入http模块,创建http请求对象。 167 1682. 设置请求地址URLl和参数,发起http请求。 169 1703. 获取请求结果response,并解析数据。 171 172**参考链接** 173 174[http数据请求](../network/http-request.md) 175 176 177## 如何使用JS封装网络请求(API 9) 178 179**解决措施** 180 181网络请求支持JS语言开发方式,可直接使用。具体使用参考如下文档:[网络连接](../reference/apis-network-kit/js-apis-http.md) 182 183 184## 基于JS开发智能手表应用,如何编写网络请求(API 9) 185 186**解决措施** 187 188网络请求支持JS语言开发方式,可直接使用。具体使用参考如下文档:[网络连接](../reference/apis-network-kit/js-apis-http.md) 189 190 191## 应用增加权限"ohos.permission.NOTIFICATION_CONTROLLER",编译后无法启动(API 9) 192 193**问题现象** 194 195启动报错:error: install failed due to grant request permissions failed. 196 197**解决措施** 198 199权限"ohos.permission.NOTIFICATION_CONTROLLER为系统级“system core”权限,第三方应用无法获取该权限。 200 201 202## WiFi模块中使用wifi.getIpInfo().ipAddress报错(API 9) 203 204**问题现象** 205 206WiFi模块中使用wifi.getIpInfo().ipAddress,报错Error: assertion (wifiDevicePtr != nullptr) failed: Wifi device instance is null 207 208**解决措施** 209 210权限不足。请先检查是否申请了相关的操作权限,权限相关信息可参考[权限管理](../security/AccessToken/determine-application-mode.md)。 211 212## 在使用Socket连接相关接口时,NetAddress的address参数只能是IP地址,如果只有host的情况如何处理?(API 11) 213 214**解决方案** 215 216可通过使用getAddressByName接口解析主机名以获取IP地址。 217 218**参考资料** 219 220[@ohos.net.connection (网络连接管理)](../reference/apis-network-kit/js-apis-net-connection.md) 221 222## 如何使用C接口使用网络相关功能?(API 11) 223 224**解决方案** 225 226目前提供了C接口的有如下几个模块: 227自定义DNS解析、证书校验、WebSocket 228 229没直接提供C接口的可以通过AKI机制调用ArkTS接口。 230 231 232**参考资料** 233 234https://gitee.com/openharmony/interface_sdk_c/tree/master/network 235 236## Socket下的TLSConnectOptions不配置是否会使用设备上的默认证书?(API 11) 237 238**解决方案** 239 240使用TLSSocket请求需要手动通过代码配置,不会使用设备上的默认证书。TLSConnectOptions部分配置证书需要使用与请求地址相匹配的证书内容,可将证书放至rawfile文件下通过getRawFileContent()方法读取转换为string类型数据放入。 241 242**参考资料** 243 244[@ohos.net.socket (Socket连接)](../reference/apis-network-kit/js-apis-socket.md)