模拟webQQ实现简单的聊天,基于WebSocket

如何使用WebSocket

首先要导入webSocket的包,git下载地址https://github.com/square/SocketRocket
导入

这个包,然后配置环境,导入需要用的框架
libicucore.dylib//这个现在Xcode里没有,需要自己找到资源后手动添加
CFNetwork.framework
Security.framework
Foundation.framework。
要记得添加pch文件。
然后编译,工程运行没有错误,进行下一步
在用到的ViewController里包含一下头文件
1.

3.一个测试用的接口ws://echo.websocket.org

4.必须实现的代理方法

  • (void)webSocketDidOpen:(SRWebSocket *)webSocket;

  • (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;

  • (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;

  • (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;

  • (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload;
    5,在第一个代理方法里发送请求
    [_webSocket send:@“test success”];

在第三个代理方法里打印数据
在第四个代理方法里置为nil
_webSocket.delegate = nil;

1:什么是WebSocket

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信–允许服务器主动发送信息给客户端。

1优点
首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。1) HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。 
其优点就是,只要建立一次连接,就可以连续不断的得到服务器推送的消息,节省带宽和服务器端的压力

2 ajax轮询:

先说说是怎么实现ajax轮询的,下面先打个比方:
在这里插入图片描述
ajax轮询示例代码
$(function() {
to_page();
setInterval(“isHave();”,3000);
});
function isHave(){
$.ajax({
url : “localhost/isHave”,
data : {},
datatype: “json”,
type : “post”,
success : function(result) { console.log(result);
},
}
});
}

其缺点显而易见,每次都要建立HTTP连接,即使需要传输的数据非常少,所以这样很浪费带宽;同时,这个过程是被动性的,即不是服务器主动推送的。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于QQ聊天记录是需要登录QQ账号才能查看的,因此需要使用QQ的API或者模拟登录的方式来实现爬取聊天记录的功能。以下是使用模拟登录的方式实现的Python代码: ```python import requests from bs4 import BeautifulSoup # 登录QQ账号,并获取cookie def login_qq(username, password): login_url = 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin' headers = { 'Referer': 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=73&pt_no_auth=1&s_url=https%3A%2F%2Fid.qq.com%2Findex.html', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } data = { 'u': username, 'p': password, 'verifycode': '', 'webqq_type': '40', 'remember_uin': '1', 'login2qq': '1', 'aid': '715030901', 'u1': 'https://id.qq.com/index.html', 'ptredirect': '0', 'h': '1', 'ptlang': '2052', 'daid': '73', 'from_ui': '1', 'pttype': '1', 'dumy': '', 'fp': 'loginerroralert', 'action': '0-35-1495675005110', 'mibao_css': 'm_webqq', 't': '1', 'g': '1', 'js_type': '0', 'js_ver': '10231', 'login_sig': '', 'pt_rsa': '0', 'pt_qzone_sig': '0', 'pt_vcode_v1': '0', 'pt_verifysession_v1': '', 'pt_randsalt': '2', 'pt_jstoken': '2040674265' } session = requests.Session() response = session.post(login_url, headers=headers, data=data) return session.cookies.get_dict() # 获取QQ聊天记录 def get_qq_chat_history(qq_number, cookie): chat_url = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/qqchat_list_v2' headers = { 'Referer': 'https://user.qzone.qq.com/{}/infocenter'.format(qq_number), 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Cookie': 'uin=o{}; skey={}'.format(qq_number, cookie['skey']) } params = { 'uin': qq_number, 'start': 0, 'num': 10, 'cgi_host': 'http://m.qzone.qq.com/cgi-bin', 'callback': 'handleTList', 't': '0.4908397081636454', 'g_tk': '5381' } session = requests.Session() response = session.get(chat_url, headers=headers, params=params) soup = BeautifulSoup(response.text, 'html.parser') chats = soup.find_all('li', class_='list_item') for chat in chats: sender = chat.find('a', class_='sender').text.strip() content = chat.find('div', class_='content').text.strip() print('{}: {}'.format(sender, content)) # 测试代码 if __name__ == '__main__': qq_number = '123456789' # QQ号码 username = 'your_qq_username' # 登录QQ账号 password = 'your_qq_password' # 登录QQ密码 cookie = login_qq(username, password) # 登录QQ账号,并获取cookie get_qq_chat_history(qq_number, cookie) # 获取QQ聊天记录 ``` 上述代码中,`login_qq`函数用于模拟登录QQ账号,并获取cookie信息;`get_qq_chat_history`函数用于获取QQ聊天记录。通过调用这两个函数,即可实现获取QQ聊天记录的功能。需要注意的是,QQ聊天记录的获取需要登录QQ账号,因此需要提供正确的QQ账号和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值