PERL 实现微信登录
get 请求:
https://login.weixin.qq.com/jslogin?
appid=wx782c26e4c19acffb
&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage
&fun=new
&lang=zh_CN
&_=1455501911998 参数:
_ 1455501911998
appid wx782c26e4c19acffb
fun new
lang zh_CN
redirect_uri https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage perl 实现:
https://login.weixin.qq.com/jslogin?
appid=wx782c26e4c19acffb
&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage
&fun=new
&lang=zh_CN
&_=$now"; 返回uuid:
window.QRLogin.code = 200; window.QRLogin.uuid = "odcptUu2JA=="; perl 获取uuid:
if ( $r =~ /window\.QRLogin\.code = 200; window\.QRLogin\.uuid = "(.*?)"/g ) {
$uuid = $1;
print "\$uuid is $uuid\n";
} get: https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?
loginicon=true
&uuid=odcptUu2JA==
&tip=1
&r=491993519
&_=1455501911999 _ 1455501911999
loginicon true
r 491993519
tip 1
uuid odcptUu2JA== 响应内容:
window.code=201;window.userAvatar = 'data:img/jpg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QAIRXhpZgAA/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU
/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAhACEAwEiAAIRAQMRAf
/EAB0AAAAHAQEBAAAAAAAAAAAAAAADBAUGBwgJAgH/xAA8EAACAQIFAgQEAwcCBgMAAAABAgMEEQAFBhIhBzEIE0FRImFxgRQykQkVI0KhseEWwUNSYmPR8CQzcv
/EAB0BAAEFAQEBAQAAAAAAAAAAAAUCAwQGBwgBAAn/xAA0EQABAwIEBAQFBAEFAAAAAAABAAIDBBEFEiExBhNBYSJRgaEHFDJxsZHB4fBCFSMzYtH
/2gAMAwEAAhEDEQA/ANTMgMu6PhGNjhQ9Erxi1t45FsEOn4TdvdVgI3F2NgtvXFOdTPF70/6axSxfvFs9zKEA/h8tG8WPvJ+W33OPz8ocLrMSfy6SIvPYfk7D1W3SytjFybBXRt3kWHI74 获取2维码:
https://login.weixin.qq.com/qrcode/odcptUu2JA== 响应就是2微码 perl 实现: my $api = "https://login.weixin.qq.com/qrcode/$uuid"; GET:
https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?
loginicon=true
&uuid=odcptUu2JA==&tip=0
&r=491986618
&_=1455501912000 参数:
_ 1455501912000
loginicon true
r 491986618
tip 0
uuid odcptUu2JA== 响应:
window.code=200;
window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?
ticket=AeWPQvkt58OOsMey6KvDGecs@qrticket_0
&uuid=odcptUu2JA==
&lang=zh_CN
&scan=1455502017"; 获取
/https\:\/\/wx\.qq\.com\/cgi\-bin\/mmwebwx-bin\/webwxnewloginpage\?ticket=(.*?)\&uuid=(.*?)\&lang=(.*?)\&scan=(.*)/ $ticket
$scan
信息 GET: https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
?ticket=AeWPQvkt58OOsMey6KvDGecs@qrticket_0
&uuid=odcptUu2JA==
&lang=zh_CN
&scan=1455502017
&fun=new
&version=v2 参数:
fun new
lang zh_CN
scan 1455502017
ticket AeWPQvkt58OOsMey6KvDGecs@qrticket_0
uuid odcptUu2JA==
version v2 perl 实现:
"https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?
ticket=$ticket
&uuid=$uuid
&lang=zh_CN
&scan=$user
&fun=new
&version=v2
&lang=zh_CN"; 响应信息:
<error><ret>0</ret><message>OK</message>
<skey>@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3</skey> <wxsid>gIxwZLa2t2UI1PKK</wxsid> <wxuin>1284510822</wxuin> <pass_ticket>o%2B%2BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho
%2FZM2YUiV9pszaKAka</pass_ticket> <isgrayscale>1</isgrayscale></error> 获取信息: /\<error.*\<skey\>(.*?)\<\/skey\>\<wxsid\>(.*?)\<\/wxsid\>\<wxuin\>(.*?)\<\/wxuin\>\<pass_ticket\>(.*?)\<\/pass_ticket.*/
)
{
$Skey = $1;
$wxsid = $2;
$wxuin = $3;
$pass_ticket = $4; POST登录:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?
r=492001298
&pass_ticket=o%252B%252BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%252FZM2YUiV9pszaKAka 参数:
pass_ticket o%2B%2BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%2FZM2YUiV9pszaKAka
r 492001298 JSON: BaseRequest Object { Uin="1284510822", Sid="gIxwZLa2t2UI1PKK", Skey="@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3", 更多...} DeviceID "e170005867035434" Sid "gIxwZLa2t2UI1PKK" Skey "@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3" Uin "1284510822" 响应信息:
{
"BaseResponse": {
"Ret": 0,
"ErrMsg": ""
}
,
"Count": 11,
"ContactList": [{
"Uin": 0,
"UserName": "filehelper",
"NickName": "文件传输助手",
"HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=647236593&username=filehelper&skey=@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3"
,
"ContactFlag": 3,
"MemberCount": 0,
"MemberList": [], jrhmpt01:/root# grep '@@' t1 | grep UserName
"UserName": "@@fc1a24d417aaa62e2235c0c49e0076e261ac33ffdb7ce42ed1b7aab1df5e45b6", --中均杭州
"UserName": "@@2c7bf588af4ed91bb09d1e47bc9fdc90aecff367d5038252c0cbb4837512f373", --龙翔开发
"UserName": "@@538bdb20d541ebdec03ac9a5f623f7058960e8a1cf39063d8ea534248863bab0", --中均-p2g开发
"UserName": "@@e0dd1658aba02dd6cc7d1320a65d946abf516921f83637fe54e7290521fb7bc7", --曾经的
"UserName": "@@f5a78ff117abd869d3546aa86b427b265669334360d26fbcbc723df031eec53b", --Perl语言交流
"UserName": "@@1447bd7bcd21cf2224059a5f05cdb28cae915e909939e40156a22af63730067f", --杭州运动达人吊炸天
"UserName": "@@5594d9ec894462d1ecb494c117d7cbefffe0fb963c62add1efa0ff1f06e52f6b", --万友“御驾俱乐部” 返回7个最近的聊天群: 返回synckey:
"SyncKey": {
"Count": 4,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244477
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 1000,
"Val": 1455498480
}
]
} GET获取好友信息: https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?
pass_ticket=o%252B%252BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%252FZM2YUiV9pszaKAka
&r=1455501928636&seq=0
&skey=@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3 pass_ticket o%2B%2BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%2FZM2YUiV9pszaKAka
r 1455501928636
seq 0
skey @crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3 perl 实现:
"https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket=$pass_ticket&seq=0&skey=$skey"; POST 批量获取群或者好友信息: https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxbatchgetcontact?
type=ex
&r=1455501928665
&pass_ticket=o%252B%252BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%252FZM2YUiV9pszaKAka 参数: pass_ticket o%2B%2BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%2FZM2YUiV9pszaKAka
r 1455501928665
type ex POST: BaseResponse Object { Ret=0, ErrMsg=""}
Ret 0
ErrMsg ""
Count 13
ContactList [Object { Uin=0, UserName="@@3fd3e5c2576f2e4fd2ae52...6e5654c3c836e864bb6e1a3", NickName="高一(4)班", 更多...}, Object { Uin=0, UserName="@@c5eeb4d29e6e29b3b937e8...48fe609affa8361b3899d6d", NickName="信管", 更多...}, Object { Uin=0, UserName="@@affc3f9e95476b672cee2a...a3dbd2ff5cf1b9f7f0b336c", HeadImgUrl="/cgi-bin/mmwebwx-bin/web...ff5cf1b9f7f0b336c&skey=", 更多...}, 10 更多...]
0 Object { Uin=0, UserName="@@3fd3e5c2576f2e4fd2ae52...6e5654c3c836e864bb6e1a3", NickName="高一(4)班", 更多...}
1 Object { Uin=0, UserName="@@c5eeb4d29e6e29b3b937e8...48fe609affa8361b3899d6d", NickName="信管", 更多...}
2 Object { Uin=0, UserName="@@affc3f9e95476b672cee2a...a3dbd2ff5cf1b9f7f0b336c",HeadImgUrl="/cgi-bin/mmwebwx-bin/web...ff5cf1b9f7f0b336c&skey=", 更多...} 3 Object { Uin=0, UserName="@@f3b2a1e0c34e2f6ee10130...ea852b8ef01ffda0f90845b", NickName="草中01届 参加同学会成员", 更多...}
4 Object { Uin=0, UserName="@@5594d9ec894462d1ecb494...c62add1efa0ff1f06e52f6b", NickName="万友“御驾俱乐部”", 更多...}
5 Object { Uin=0, UserName="@@1447bd7bcd21cf2224059a...939e40156a22af63730067f", NickName="杭州运动达人吊炸天", 更多...}
6 Object { Uin=0, UserName="@@f5a78ff117abd869d3546a...0d26fbcbc723df031eec53b", NickName="Perl语言交流", 更多...}
7 Object { Uin=0, UserName="@@e0dd1658aba02dd6cc7d13...83637fe54e7290521fb7bc7", NickName="曾经的", 更多...}
8 Object { Uin=0, UserName="@@538bdb20d541ebdec03ac9...f39063d8ea534248863bab0", NickName="中均-p2g开发", 更多...}
9 Object { Uin=0, UserName="@@2c7bf588af4ed91bb09d1e...5038252c0cbb4837512f373", NickName="龙翔-开发", 更多...}
10 Object { Uin=0, UserName="@@fc1a24d417aaa62e2235c0...b7ce42ed1b7aab1df5e45b6", NickName="中均杭州", 更多...}
11 Object { Uin=0, UserName="@0775fda855788551bbe250c...f8cfc0822798bb54d127f41", NickName="悠悠球", 更多...}
12 Object { Uin=0, UserName="@17c18ef608386145b132bd0b0054e8df", NickName="我们青年", 更多...} synccheck消息:
https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?
r=1455501928659
&skey=%40crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3
&sid=gIxwZLa2t2UI1PKK
&uin=1284510822
&deviceid=e558196322767022
&synckey=1_647243436%7C2_647244477%7C3_647244323%7C1000_1455498480
&_=1455501912001 之前接口返回的信息:
返回synckey:
"SyncKey": {
"Count": 4,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244477
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 1000,
"Val": 1455498480
}
]
} window.synccheck={retcode:"0",selector:"2"} 如果 selector不等于0 说明有消息可以接收,同时 &synckey=1_647243436%7C2_647244477%7C3_647244323%7C1000_1455498480 也会更新 POST 接收消息:
https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?
sid=gIxwZLa2t2UI1PKK
&skey=@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3
&pass_ticket=o%252B%252BIadCvPXn43usbrXpKIHywlcfiZtDYIz1NHOgTeGDHHho%252FZM2YUiV9pszaKAka JSON: BaseRequest Object { Uin=1284510822, Sid="gIxwZLa2t2UI1PKK", Skey="@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3", 更多...} DeviceID "e556867536148005" Sid "gIxwZLa2t2UI1PKK" Skey "@crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3" Uin 1284510822 SyncKey Object { Count=4, List=[4]} Count 4 List [Object { Key=1, Val=647243436}, Object { Key=2, Val=647244477}, Object { Key=3, Val=647244323}, Object { Key=1000, Val=1455498480}] 0 Object { Key=1, Val=647243436} Key 1 Val 647243436 1
Object { Key=2, Val=647244477} Key 2 Val 647244477 2 Object { Key=3, Val=647244323} Key 3 Val 647244323 3 Object { Key=1000, Val=1455498480} Key 1000 Val 1455498480 rr 491984352 返回的信息:
"SyncKey": {
"Count": 6,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244478
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 11,
"Val": 647244136
}
,{
"Key": 13,
"Val": 647230079
}
,{
"Key": 1000,
"Val": 1455499548
}
]
}
,
"SKey": ""
} 下次去synccheck的时候需要使用最新的SKey信息: https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455501929217
&skey=%40crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3&sid=gIxwZLa2t2UI1PKK&uin=1284510822
&deviceid=e543010771618021
&synckey=1_647243436%7C2_647244478%7C3_647244323%7C11_647244136%7C13_647230079%7C1000_1455499548
&_=1455501912002 继续webwxsync 获取消息:
"SyncKey": {
"Count": 7,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244479
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 11,
"Val": 647244136
}
,{
"Key": 13,
"Val": 647230079
}
,{
"Key": 201,
"Val": 1455502020
}
,{
"Key": 1000,
"Val": 1455499548
}
]
}
,
"SKey": ""
} 继续synccheck: https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455501929535&skey=%40crypt_597aeefd_bdc74c48d52021dfc48d48e030038bf3
&sid=gIxwZLa2t2UI1PKK
&uin=1284510822&deviceid=e873338445592918
&synckey=1_647243436%7C2_647244479%7C3_647244323%7C11_647244136%7C13_647230079%7C201_1455502020%7C1000_1455499548
&_=1455501912003 "SyncKey": {
"Count": 7,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244492
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 11,
"Val": 647244136
}
,{
"Key": 13,
"Val": 647230079
}
,{
"Key": 201,
"Val": 1455502724
}
,{
"Key": 1000,
"Val": 1455499548
}
]
}
,
"SKey": ""
} synckey
1_647243436|2_647244492|3_647244323|11_647244136|13_647230079|201_1455502724|1000_1455499548 synckey
1_647243436|2_647244492|3_647244323|11_647244136|13_647230079|201_1455502724|1000_1455499548 List
[Object { Key=1, Val=647243436}, Object { Key=2, Val=647244492}, Object { Key=3, Val=647244323}, 4 更多...] 0
Object { Key=1, Val=647243436} 1
Object { Key=2, Val=647244492} 2
Object { Key=3, Val=647244323} 3
Object { Key=11, Val=647244136} 4
Object { Key=13, Val=647230079} 5
Object { Key=201, Val=1455502724} 6
Object { Key=1000, Val=1455499548} "SyncKey": {
"Count": 7,
"List": [{
"Key": 1,
"Val": 647243436
}
,{
"Key": 2,
"Val": 647244493
}
,{
"Key": 3,
"Val": 647244323
}
,{
"Key": 11,
"Val": 647244136
}
,{
"Key": 13,
"Val": 647230079
}
,{
"Key": 201,
"Val": 1455502763
}
,{
"Key": 1000,
"Val": 1455499548
}
]
}
,
"SKey": ""
} synckey
1_647243436|2_647244493|3_647244323|11_647244136|13_647230079|201_1455502763|1000_1455499548 $url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506643&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244579|3_647244568|11_647244136|13_647230079|201_1455506642|1000_1455499548|&_=1455506643
window.synccheck={retcode:"0",selector:"0"}$mss is 0
$url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506670&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244579|3_647244568|11_647244136|13_647230079|201_1455506642|1000_1455499548|&_=1455506670
window.synccheck={retcode:"0",selector:"0"}$mss is 0
$url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506697&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244579|3_647244568|11_647244136|13_647230079|201_1455506642|1000_1455499548|&_=1455506697
window.synccheck={retcode:"0",selector:"0"}$mss is 0
$url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506724&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244579|3_647244568|11_647244136|13_647230079|201_1455506642|1000_1455499548|&_=1455506724
window.synccheck={retcode:"0",selector:"0"}$mss is 0
$url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506751&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244579|3_647244568|11_647244136|13_647230079|201_1455506642|1000_1455499548|&_=1455506751 $url is https://webpush.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck?r=1455506800&skey=%40crypt_597aeefd_1c4a59656d1b8b73fc5c47148d5e9dd4&sid=MNNfAOeEeHbK2NbV&uin=1284510822&deviceid=e162744016627176&synckey=1_647243436|2_647244583|3_647244568|11_647244136|13_647230079|201_1455506797|1000_1455499548|&_=1455506800
PERL 实现微信登录的更多相关文章
- 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...
- 网站实现微信登录之嵌入二维码——基于yii2开发的描述
之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...
- php的laravel框架快速集成微信登录
最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_provider,详细的介绍请往下阅读. 本文面向的是php语言laravel框架的用户,介绍的是 ...
- 关于使用微信登录第三方APP的实现(Android版)
使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...
- PHP开发网站之微信登录、绑定
)))刷新access_token()); ); ); curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curlo ...
- 网站微信登录授权 ASP.NET
最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...
- 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- iOS开发笔记14:微博/微信登录与分享、微信/支付宝支付
产品中接入了微博/微信的第三方登录分享功能.微信和支付宝的第三方支付功能,之前在开发过程中涉及到这些部分,于是抽空将接入过程梳理了一遍. 1.微博.微信.支付宝SDK相关接入设置 (1)微博SDK S ...
- react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付
微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问 http://blog.1ygowu.com ReactNat ...
随机推荐
- BZOJ2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 56 Solved: 16[S ...
- poj1220:高精度进制转换模板题
今天撸3708 一直奇怪的re 就先放下了,写这个题的过程中学习了一个高精度进制转换,用这个模板写了1220 记录一下: #include <iostream> #include < ...
- 选择Comparable接口还是Comparator
个人理解: 如果我本身知道这个类的对象我要用来比较,那么就拿这个类实现Comparable接口(compareTo(Object o) 方法).如果我本身没有预料到我要比较这个类的对象,那么,我可以建 ...
- ServerSocketChannel实现多Selector高并发server
参考hbase RpcServer,编写了一个简洁版多Selector server,对nio怎么用,Selector如何选择事件会有更深入的认识. client端发送消息:内容长度 + 内容,200 ...
- 必看谷歌HTML/CSS规范
背景 这篇文章定义了 HTML 和 CSS 的格式和代码规范,旨在提高代码质量和协作效率. 通用样式规范 协议 省略图片.样式.脚本以及其他媒体文件 URL 的协议部分( http:,https: ) ...
- GitHub上可能用到的开源
AGi18n :https://github.com/angelolloqui/AGi18n 可以简单地本地化你的iOS app,从代码和XIB文件中提取文本转化成可本地化的字符串,且不会改变XIB文 ...
- IIS PHP 配置 问题总结
今天帮助朋友解决一个IIS配置PHP的问题.大概是这样子的. IIS 与 PHP配置好了之后不能訪问,出现例如以下错误: HTTP 错误 500.19 - Internal Server Error ...
- WebApi2官网学习记录---Tracing
安装追踪用的包 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHo ...
- AVT Vimba与OpenCV环境配置
近来,由于项目需求,需要使用AVT的一款相机采集图像并进行相应的算法处理.环境的配置过程较为复杂,特此记录,以做备忘.也给有需要的小伙伴们一些key point的分享. 搭建环境:Windows7 + ...
- Asp.net中实现同一用户名同时登陆,注销先前用户(转)
Web 项目中经常遇到的问题就是同一用户名多次登陆的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法:将登陆后的用户名放到数据库表中:登陆后的用 户名放到Session中:登陆后的用户名放到A ...