diff options
| -rw-r--r-- | protocols/VKontakte/src/version.h | 2 | ||||
| -rw-r--r-- | protocols/VKontakte/src/vk_captcha.cpp | 16 | ||||
| -rw-r--r-- | protocols/VKontakte/src/vk_queue.cpp | 11 | ||||
| -rw-r--r-- | protocols/VKontakte/src/vk_struct.cpp | 5 | ||||
| -rw-r--r-- | protocols/VKontakte/src/vk_thread.cpp | 12 |
5 files changed, 31 insertions, 15 deletions
diff --git a/protocols/VKontakte/src/version.h b/protocols/VKontakte/src/version.h index 55fdea4fd7..7dd0a47a50 100644 --- a/protocols/VKontakte/src/version.h +++ b/protocols/VKontakte/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 1
#define __RELEASE_NUM 17
-#define __BUILD_NUM 5
+#define __BUILD_NUM 6
#include <stdver.h>
diff --git a/protocols/VKontakte/src/vk_captcha.cpp b/protocols/VKontakte/src/vk_captcha.cpp index fa3ff6b6e3..98a8624058 100644 --- a/protocols/VKontakte/src/vk_captcha.cpp +++ b/protocols/VKontakte/src/vk_captcha.cpp @@ -82,7 +82,21 @@ bool CVkProto::ApplyCaptcha(AsyncHttpRequest *pReq, const JSONNode &jnErrorNode) if (!RunCaptchaForm(szUrl, userReply))
return false;
- pReq << CHAR_PARAM("captcha_sid", szSid) << CHAR_PARAM("captcha_key", userReply.GetString());
+
+ CMStringA szCapthaStr(FORMAT, "&captcha_sid=%s&captcha_key=%s", mir_urlEncode(szSid).c_str(), mir_urlEncode(userReply.GetString()).c_str());
+
+ int iCaptchaBeg = pReq->m_szUrl.Find("&captcha_sid=", 0);
+ int iCaptchaEnd = pReq->m_szUrl.Find("&v=", 0);
+
+ if ((iCaptchaBeg > -1) && (iCaptchaEnd > iCaptchaBeg))
+ pReq->m_szUrl.Replace(pReq->m_szUrl.Mid(iCaptchaBeg, iCaptchaEnd - iCaptchaBeg).c_str(), szCapthaStr);
+ else if (iCaptchaEnd > -1)
+ pReq->m_szUrl.Replace("&v=", szCapthaStr + "&v=");
+ else
+ pReq->m_szUrl += szCapthaStr;
+
pReq->bNeedsRestart = true;
+ debugLogA("CVkProto::ApplyCaptcha %s", pReq->m_szUrl);
+
return true;
}
\ No newline at end of file diff --git a/protocols/VKontakte/src/vk_queue.cpp b/protocols/VKontakte/src/vk_queue.cpp index 24b698af9c..eb9457e5e2 100644 --- a/protocols/VKontakte/src/vk_queue.cpp +++ b/protocols/VKontakte/src/vk_queue.cpp @@ -51,12 +51,17 @@ bool CVkProto::ExecuteRequest(AsyncHttpRequest *pReq) {
mir_cslock lck(m_csWorkThreadTimer);
tLocalWorkThreadTimer = m_tWorkThreadTimer = time(0);
+ if (pReq->m_bApiReq)
+ ApplyCookies(pReq);
}
debugLogA("CVkProto::ExecuteRequest \n====\n%s\n====\n", pReq->m_szUrl.c_str());
NLHR_PTR reply(Netlib_HttpTransaction(m_hNetlibUser, pReq));
{
mir_cslock lck(m_csWorkThreadTimer);
+ if (pReq->m_bApiReq)
+ GrabCookies(reply, "api.vk.com");
+
if (tLocalWorkThreadTimer != m_tWorkThreadTimer) {
debugLogA("CVkProto::WorkerThread is living Dead => return");
delete pReq;
@@ -141,7 +146,6 @@ void CVkProto::WorkerThread(void*) // Initialize new OAuth session
extern char szBlankUrl[];
extern char szVKUserAgent[];
- extern char szVKUserAgentCH[];
AsyncHttpRequest *pReq = new AsyncHttpRequest(this, REQUEST_GET, "https://oauth.vk.com/authorize", false, &CVkProto::OnOAuthAuthorize);
pReq
@@ -153,11 +157,12 @@ void CVkProto::WorkerThread(void*) << VER_API;
// Headers
- pReq->AddHeader("User-agent", szVKUserAgent);
+ pReq->AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7");
+ pReq->AddHeader("Accept-language", "ru-RU,ru;q=0.9");
+ pReq->AddHeader("User-Agent", szVKUserAgent);
pReq->AddHeader("dht", "1");
pReq->AddHeader("origin", "https://oauth.vk.com");
pReq->AddHeader("referer", "https://oauth.vk.com/");
- pReq->AddHeader("sec-ch-ua", szVKUserAgentCH);
pReq->AddHeader("sec-ch-ua-mobile", "?0");
pReq->AddHeader("sec-ch-ua-platform", "Windows");
pReq->AddHeader("sec-fetch-dest", "document");
diff --git a/protocols/VKontakte/src/vk_struct.cpp b/protocols/VKontakte/src/vk_struct.cpp index 08214a8089..7e23482d02 100644 --- a/protocols/VKontakte/src/vk_struct.cpp +++ b/protocols/VKontakte/src/vk_struct.cpp @@ -24,7 +24,8 @@ ULONG AsyncHttpRequest::m_uReqCount = 0; AsyncHttpRequest::AsyncHttpRequest()
{
m_bApiReq = true;
- AddHeader("Connection", "keep-alive");
+ AddHeader("Connection", "close");
+
pUserInfo = nullptr;
m_iRetry = MAX_RETRIES;
m_iErrorCode = 0;
@@ -39,7 +40,7 @@ AsyncHttpRequest::AsyncHttpRequest(CVkProto *ppro, int iRequestType, LPCSTR _url {
m_bApiReq = true;
bIsMainConn = false;
- AddHeader("Connection", "keep-alive");
+ AddHeader("Connection", "close");
if (ppro->bIint64IDCompatibility)
AddHeader("X-Owner", "long");
diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp index 01c66ab27c..951d64bd8a 100644 --- a/protocols/VKontakte/src/vk_thread.cpp +++ b/protocols/VKontakte/src/vk_thread.cpp @@ -23,7 +23,6 @@ mir_cs CVkProto::m_csTimer; char szBlankUrl[] = "https://oauth.vk.com/blank.html";
char szScore[] = "friends,photos,audio,docs,video,wall,messages,offline,status,notifications,groups";
char szVKUserAgent[] = "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko";
-char szVKUserAgentCH[] = "\"Microsoft Edge\";v =\"95\", \"Chromium\";v =\"95\", \";Not A Brand\";v = \"99\"";
static char szVKTokenBeg[] = "access_token=";
static char szVKLoginDomain[] = "https://m.vk.com";
@@ -223,7 +222,7 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pReq->m_bApiReq = false;
pReq->bIsMainConn = true;
ApplyCookies(pReq);
- pReq->AddHeader("User-agent", szVKUserAgent);
+ pReq->AddHeader("User-Agent", szVKUserAgent);
Push(pReq);
return;
}
@@ -267,10 +266,8 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pRedirectReq->m_bApiReq = false;
pRedirectReq->bIsMainConn = true;
// Headers
- pRedirectReq->AddHeader("User-agent", szVKUserAgent);
+ pRedirectReq->AddHeader("User-Agent", szVKUserAgent);
pRedirectReq->AddHeader("dht", "1");
- pRedirectReq->AddHeader("sec-ch-ua", szVKUserAgentCH);
- pRedirectReq->AddHeader("sec-ch-ua-mobile", "?0");
pRedirectReq->AddHeader("sec-ch-ua-platform", "Windows");
pRedirectReq->AddHeader("sec-fetch-dest", "document");
pRedirectReq->AddHeader("sec-fetch-mode", "navigate");
@@ -351,12 +348,11 @@ void CVkProto::OnOAuthAuthorize(MHttpResponse *reply, AsyncHttpRequest*) pReq->Redirect(reply);
ApplyCookies(pReq);
// Headers
- pReq->AddHeader("User-agent", szVKUserAgent);
+ pReq->AddHeader("User-Agent", szVKUserAgent);
pReq->AddHeader("dht", "1");
pReq->AddHeader("origin", "https://oauth.vk.com");
pReq->AddHeader("referer", "https://oauth.vk.com/");
- pReq->AddHeader("sec-ch-ua", szVKUserAgentCH);
- pReq->AddHeader("sec-ch-ua-mobile", "?0");
+
pReq->AddHeader("sec-ch-ua-platform", "Windows");
pReq->AddHeader("sec-fetch-dest", "document");
pReq->AddHeader("sec-fetch-mode", "navigate");
|
