小工具也要花时间去研究细节问题。
采用CefSharp的ChromiumWebBrowser控件,跳转到qzone.qq.com,让用户正常登录。
使用ChromiumWebBrowser控件的cookie,用WebClient类来get/post操作
private void CopyCookie(ChromiumWebBrowser src, WebClient dst)
{
var cookies = src.GetCookieManager().VisitAllCookiesAsync().Result;
string strcookies = "";
foreach (var cookie in cookies)
{
strcookies += cookie.Name + "=" + cookie.Value + ";";
}
dst.Headers.Add("Cookie", strcookies);
}
登录后从WebBrowser控件的cookie里拿到p_skey字段,计算出g_tk
private int GetG_TK(string p_skey)
{
string e = p_skey;
var t = 5381;
for (int n = 0, r = e.Length; n < r; ++n)
{
t += (t << 5) + e[n];
}
return t & 0x7FFFFFFF;
}
-
质量:从相册列表里拿到的图片url,有多种质量可选,直接修改url的相关参数。
- /a/是最小图片
- /m/是预览图,在相片对象的pre属性里,也就是相册封面正常图片。
- /b/是大图,在相片对象的url属性里。
- /r/是原图,在相片对象的raw属性里。
-
格式:也是修改url里的参数。
-
t=5是webp格式
-
d=0是jpge格式
-
d=1是流格式,此时可以从返回的Header里得到以下信息:
Content-Type: application/octet-stream Content-Disposition: attachment; filename=default.jpeg
可以拿到原图的具体格式,并且以流方式传输,可以保证图片质量。
-