HarmonyHttpClient是一个鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相似的使用,解放双手般优雅使用注解、自动解析json
RequestParams params = new RequestParams() .put("userName","oscer") .put("pwd","oschina"); Request request = new Request.Builder().encode("UTF-8") .method("GET") .timeout(13000) .url("http://www.oschina.net") .build();
//请求参数 RequestParams params = new RequestParams() .put("userName","oscer") .putFile("fileName","file") .put("pwd","oschina"); //请求对象 Request request = new Request.Builder() .encode("UTF-8") .method("POST") .params(params) .timeout(13000) .url("http://www.oschina.net") .build();
Request request = new Request.Builder() .encode("UTF-8") .method("POST") .content(new JsonContent("json") .timeout(13000) .url("http://www.oschina.net") .build();
//构建Http客户端,这里可以进行全局static final HttpNetClient client = new HttpNetClient(); client.setProxy("192.168.1.1",80);//您也可以开启该客户端全局代理 client.addInterceptor(new Interceptor() { /* 拦截器在执行请求前都会走到这一步,如果是同步的,就是当前线程,如果是异步,就是子线程 * 因此可以在这里动态添加全局Cookie或其它Header之类的 * 进阶使用:如果要求对所有接口Form表单进行全局加密,也可以在这里执行 */ @Override public void intercept(Request request) { Log.e("请求拦截器当前线程: " + Thread.currentThread().getName() + " -- " + request.url()); } }); //执行异步请求 client.newCall(request) //如果采用上传文件方式,可以在这里开启上传进度监控 .intercept(new InterceptListener() { @Override public void onProgress(final int index, final long currentLength, final long totalLength) { Log.e("当前进度", " -- " + ((float) currentLength / totalLength) * 100); } }) .execute(new Callback() { @Override public void onResponse(Response response) { String body = response.getBody();//getBody()和toStream()是互斥的 InputStream is = response.toStream();//如果采用下载,可以在这里监听下载进度 } @Override public void onFailure(Exception e) { Log.e("onFailure " + e.getMessage()); } }); // 也可以在子线程中执行同步请求,如果有几个接口需要进行顺序请求,此方法最佳 try { Response response = client.newCall(request).execute(); String body = response.getBody(); }catch (Exception e){ e.printStackTrace(); }
// 构建请求java接口,采用动态代理+注解实现,服务器返回什么,Call<服务器返回json对应的Java bean>即可 public interface LoginService { //普通POST,方法名添加请求方法注解POST、GET、DELETE、Header等,方法参数添加Form表单注解 @Headers({"Cookie:cid=adcdefg;"})//静态Header @POST("api/users/login") Call<BaseModel<User>> login(@Form("email") String email, @Form("pwd") String pwd, @Form("versionNum") int versionNum, @Form("dataFrom") int dataFrom); // 上传文件 @POST("action/apiv2/user_edit_portrait") @Headers("Cookie:xxx=hbbb;")//上传文件注解 Call<String> postAvatar(@File("portrait") String file); //JSON POST @POST("action/apiv2/user_edit_portrait") @Headers("Cookie:xxx=hbbb;") Call<String> postJson(@Json String file);//如果是Json POST,这么使用即可 //PATCH @PATCH("mobile/user/{uid}/online")//动态修改url路径 Call<ResultBean<String>> handUp(@Path("uid") long uid); }
public static final String API = "http://www.oschina.net/"; public static Retrofit retrofit = new Retrofit(); retrofit.registerApi(API);//注册api //进阶使用,假设服务器返回来的json内容是aes加密的,那么可以添加转化器,拦截响应,aes解密后再返回,此方法一定在子线程执行,直接执行耗时操作 retrofit.setConverterFactory(new ConverterFactory() { @Override public void convert(com.haibin.retrofit.Response response) { response.setBodyString("{json}");//拦截响应数据,修改内容,如aes解密后再返回 Log.e("响应转换器当前线程: " + Thread.currentThread().getName()); } }); //执行异步请求,异步请求可以直接在UI线程执行 retrofit.from(LoginService.class) .login("xxx@qq.com", "123456", 2, 2); .withHeaders(Headers...)//动态添加某些Header .execute(new Callback<BaseModel<User>>() { @Override public void onResponse(Response<BaseModel<User>> response) { //回调是切换在UI线程,可直接更新界面,自动解析body,就是BaseModel<User>,需要判断body为不为null } @Override public void onFailure(Exception e) { } }); //当然也支持同步请求,顺序请求N个接口的最佳方法,解决逻辑嵌套,这里只能在子线程执行 Response<BaseModel<User>> response = retrofit.from(LoginService.class) .login("xxx@qq.com", "123456", 2, 2); .withHeaders(Headers...) .execute();
主要内容:前言,Netty客户端与服务端交互流程,1. 写一个NettyServer,2. 写一个NettyClient, ChannelHandler ,3. 用NettyClient测试NettyServer,4. 整合netty,5. failed to create a child event loop 报错问题前言 上篇文章写到了利用zookeeper的特性实现缓存服务地址列表,接下来我们可以借助Netty的优点对程序进行改造,使其即支持Http容器的
我有一个聊天机器人解决方案创建使用。Net Framework,该框架与Facebook messenger集成,使用Microsoft提供的以下说明: https://docs.microsoft.com/en-us/azure/bot-service/bot-service-channel-connect-facebook?view=azure-bot-service-4.0 现在他们添加了一
本文向大家介绍基于NIO的Netty网络框架(详解),包括了基于NIO的Netty网络框架(详解)的使用技巧和注意事项,需要的朋友参考一下 Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。 Netty的优点有: a、功
本文向大家介绍Flutter 网络请求框架封装详解,包括了Flutter 网络请求框架封装详解的使用技巧和注意事项,需要的朋友参考一下 Flutter 请求网络的三种方式 flutter 请求网络的方式有三种,分别是 Dart 原生的网络请求 HttpClient、第三方网络请求 http以及 Flutter 中的 Dio。我们可以比较一下这三种网络请求方式,然后封装为我们方便请求网络的工具类。
前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)[1]。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。 NiN块 我们知道,卷积层
在 libuv 中,网络编程与直接使用 BSD socket 区别不大,有些地方还更简单,概念保持不变的同时,libuv 上所有接口都是非阻塞的。它还提供了很多工具函数,抽象了恼人、啰嗦的底层任务,如使用 BSD socket 结构体设置 socket 、DNS 查找以及调整各种 socket 参数。 在网络I/O中会使用到uv_tcp_t和uv_udp_t。 note 本章中的代码片段仅用于展示
1 三次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数 A。 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1
网络 [IPV6] ipv6.disable={0|1} ipv6.disable_ipv6={0|1} 是否在所有网络接口上禁用IPv6支持:0(默认值)表示在所有网络接口上开启IPv6支持;1 表示在所有网络接口上关闭IPv6支持。建议使用"ipv6.disable=1"(彻底禁用ipv6内核模块) [IPV6] ipv6.autoconf={0|1} 是否在所有网络接口上开启IPv6地址自动