`
chenpeilei2003
  • 浏览: 191387 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

http回调

阅读更多

在做客户端应用时, 经常遇到联网, 需要获取远端服务的response, 在数据返回时通知给客户端,在此做下记录。

1. 建一个线程, 处理发送和接收

//仅供备忘 , 需要完善的还有连接数控制,流处理,请求附加码,连接百分比等

abstract class Http implements Runnable {
	public boolean isDisconnect = false;
	private Thread thread;
	private HttpURLConnection httpUrlConnection;
	private URL Url;
	public Http http;
	private int state;
                //保存连接
	private List<HttpURLConnection> connections;
	private InputStream inputStream;
	private ArrayList<HttpURLConnection> removeAble = null;

	public Http() {
		System.out.println("---->Http Constructor<---");
		http = this;
		connections = new ArrayList<HttpURLConnection>();
		thread = new Thread(this);
		thread.start();

	}

	@Override
	public void run() {
		String path = "";
		while (!isDisconnect) {
			try {
				Thread.sleep(10);
				int cnt = 1;
				for (HttpURLConnection conn : connections) {

					path = conn.getURL().toString();
					System.out.println("正在连接第" + cnt + "个, " + path);
					inputStream = conn.getInputStream();
					if (inputStream != null) {
						System.out.println("正在读取:" + path);
						onHttp(inputStream, path, conn.getResponseCode());
						inputStream.close();
						inputStream = null;
						if (removeAble == null) {
							removeAble = new ArrayList<HttpURLConnection>();
						}
						removeAble.add(conn);
					}
					cnt++;
				}
				// remove
				if (removeAble != null) {
					for (HttpURLConnection conn : removeAble) {
						popConnect(conn);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public boolean get(String url) {
		try {
			Url = new URL(url);
			httpUrlConnection = (HttpURLConnection) Url.openConnection();
			httpUrlConnection.setRequestMethod("GET");
			httpUrlConnection.setDoOutput(true);
			httpUrlConnection.setConnectTimeout(10 * 1000);
			pushConnect(httpUrlConnection);
			System.out.println(connections.size());
			Url = null;
			httpUrlConnection = null;
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return true;
	}

	public boolean post(String url, byte[] buff) {
		return true;
	}

	private void pushConnect(HttpURLConnection http) {
		// for (HttpURLConnection h : connections) {
		// String h1 = null;
		// String h2 = null;
		// h1 = h.getURL().getPath();
		// h2 = http.getURL().getPath();
		// if (h1.equals(h2)) {
		// return;
		// }
		// }
		this.connections.add(http);
	}

	private void popConnect(HttpURLConnection obj) {
		synchronized (this) {
			connections.remove(obj);
		}
	}

	public abstract void onHttp(InputStream inputStream, String url, int code);

}

class HttpClient extends Http{

  @Override
  public void onHttp(...){
    //在此事件里处理返回的流
 }
}

 

分享到:
评论

相关推荐

    java实现企业微信回调配置案例

    - `controller`:回调处理控制器,处理HTTP请求。 - `model`:事件模型,定义各种事件的Java对象。 - `service`:业务逻辑层,实现具体的事件处理。 - `util`:工具类,如签名验证、JSON解析等辅助功能。 8. **...

    webhookinbox, 在实时中,接收HTTP回调并查看数据.zip

    webhookinbox, 在实时中,接收HTTP回调并查看数据 WebhookInbox作者:Justin Karneges justin@fanout.io,Katsuyuki Ohmuro harmony7@pex2.jp 。邮件列表:http://lists.fanout.io/mailma

    java http post和get请求回调

    总结来说,Java中实现HTTP POST和GET请求,特别是带回调的功能,涉及到网络编程的基本原理和Java的异步处理技术。了解这些知识点对于开发涉及网络通信的Java应用至关重要。通过自定义类和使用Java 8的特性,我们可以...

    微信企业号回调模式实例(Java版)

    当微信企业号接收到特定事件(如用户关注、取消关注、消息发送等)时,会根据开发者设置的回调URL,向该地址发送一个HTTP请求,携带相关的事件数据。开发者需要在服务器端接收这个请求,处理数据并返回适当的响应。...

    webhookinbox:接收HTTP回调并实时查看数据

    如果您正在开发进行HTTP回调的服务,则WebhookInbox可以用作检查发送内容的便捷方法。 传入请求数据会实时显示在WebhookInbox网站上。 还有一个REST API可用,这意味着WebhookInbox可以以编程方式使用,例如希望...

    简单回调demo

    例如,在JavaScript中,我们可以使用Ajax来发送一个HTTP请求,并提供一个回调函数来处理响应数据: ```javascript function sendRequest(url, callback) { var xhr = new XMLHttpRequest(); xhr....

    亲测完整微信企业号回调模式URL验证代码

    - 微信企业号回调模式是一种基于HTTP/HTTPS协议的安全机制,用于确保微信服务器发送的消息只能被正确配置的回调URL接收。 - 在回调模式下,微信服务器在接收到企业号应用的请求后,会向设置的回调URL发送一个带有...

    回调实例 Android

    在Android开发中,回调函数是一种常见的编程模式,用于处理异步操作的结果或者在...通过阅读提供的博客文章(http://blog.csdn.net/iblue007/article/details/48804331),可以更深入地学习和实践Android回调的使用。

    android接口回调详解、简单例子+复杂例子

    在Android开发中,接口回调是一种常见的通信机制,用于在组件之间传递信息,特别是在异步操作中,如网络请求、文件读写等。接口回调能够帮助我们处理这些操作的结果,使得程序更加灵活和响应式。本篇文章将深入讲解...

    form表单的异步回调方法

    4. **回调函数(Callback Functions)**:在异步请求中,我们通常需要定义回调函数来处理服务器的响应。对于`fetch`,可以使用`.then`和`.catch`来处理成功的响应和错误。对于`XMLHttpRequest`,可以监听`...

    微信企业号回调接口

    1. **回调接口的基本结构**:微信企业号的回调接口通常基于HTTP或HTTPS协议,采用JSON格式传递数据。企业需要在微信企业号后台配置回调URL,这个URL就是微信服务器发送事件通知的地方。同时,为了保证数据的安全性,...

    微信支付-商户支付模式一url接口回调-java版

    可以使用Spring MVC的`@RequestMapping`注解来定义处理回调的HTTP方法。 ```java @RestController public class WeChatPayCallbackController { @PostMapping("/wechat/pay/callback") public String ...

    移动demo处理回调

    在移动应用开发中,"移动demo处理回调"是一个关键的概念,尤其在涉及到网络请求和数据交互时。这里的“回调”通常指的是异步编程中的回调函数,它是处理网络操作(如AJAX)完成后的响应的一种机制。AJAX,即...

    oss文件上传(带回调)

    5. **回调机制**:在OSS文件上传过程中,可以通过设置回调URL,在文件上传成功后,OSS会发起一个HTTP请求到这个URL,开发者可以在此处理如更新数据库记录、发送通知等任务。 6. **生成二维码**:在获取到OSS返回的...

    天翼短信验证码回调接口源码

    3. **接收回调**:天翼短信服务在成功发送验证码后,会向你提供的回调URL发送一个HTTP请求,这个请求携带验证码和唯一标识等信息。 4. **处理回调数据**:在你的服务器端,你需要编写代码来处理这个回调请求,从...

    支付宝APP支付以及回调验签demo

    支付完成后,支付宝会将结果通过HTTP POST方式发送到预先设置的回调URL。此时,我们需要验证回调数据的完整性与合法性。验签的过程大致如下: 1. 从请求中提取支付宝返回的签名`sign`和签名类型`sign_type`。 2. ...

    js回调函数示例

    3. 网络请求:发送HTTP请求获取数据,一旦数据到达,回调函数会被调用来处理响应。 4. 时间间隔:使用`setTimeout`或`setInterval`时,指定的函数会在延迟后或定期被回调执行。 在JavaScript中,回调函数最常见的...

    asynchttpclient:Golang异步http客户端使用回调

    `asynchttpclient`库是实现这一功能的一个选择,它允许开发者通过回调函数来处理HTTP请求的响应,从而提高程序的执行效率。下面将详细解释异步HTTP客户端的基本概念、工作原理以及如何在Golang中使用回调函数。 **...

    微信支付demo 最新版 V3.3.7 有微信支付加 微信回调所有程序 可直接运行

    4. **微信支付回调(notify_url)**:当用户完成支付后,微信服务器会通过指定的回调URL向商户服务器发送异步通知,告知支付结果。Demo包含了处理这些回调事件的代码,通常包括验证签名、确认订单状态、更新数据库等...

Global site tag (gtag.js) - Google Analytics