Такая проблема: надо перед запросом на сайт удалить куки, связанные с этим сайтом. Делаю следующее: | Код | function THTTPThread.GetCookie(AHost: string): string; var lpStr: PChar; lpLen: Cardinal; begin lpLen := 0; InternetGetCookie(PChar(AHost), nil, nil, lpLen); if lpLen > 0 then begin lpStr := SysGetMem(lpLen); try InternetGetCookie(PChar(AHost), nil, lpStr, lpLen); if lpStr <> '' then Result := Copy(lpStr, 1, lpLen); finally SysFreeMem(lpStr); end; end; end;
procedure THTTPThread.DeleteCookie(AHost: string); var lCook: string; lpStr: PChar; begin lCook := GetCookie(AHost); if lCook <> '' then begin // <-------------------------------------- Вот тут не знаю что сделать =(((((( end; end;
|
Нашел на винграде такой код на C++: | Код | BOOL MHTTP_KillCookie(const char *url, const char *name) { BOOL ret_code = FALSE; char* cook; const char sReset[] = " = 0; expires = Sat, 01-Jan-1990 00:00:00 GMT"; cook = (char*)heap_alloc(lstrlen(name) + sizeof(sReset)); if(!cook) return ret_code; lstrcpy(cook, name); lstrcat(cook, sReset); ret_code = InternetSetCookie(url, NULL, cook); heap_free(cook); return ret_code; } // ############################################################################ void MHTTP_KillCookies(const char *url) { char serv[255]; //адрес сервера где убиваем Cookie //удаляем все временные файлы интернета MHTTP_DelTempFiles(); // ------------------------------------------------------------------------ // Взятие с url адреса сервера serv // здесь строки вида "http://google.com/path?query" превращаются в // строки вида "http://google.com", тобишь возвращается сервер от полного адреса коль не ясно HTTPT_url hurl; HTTPT_UrlParse(&hurl, url); HTTPT_UrlGetServAddr(hurl, serv); // ------------------------------------------------------------------------ DWORD size; InternetGetCookie(serv, NULL, 0, &size); if (!size) return; char* data = (char*)heap_alloc(size); InternetGetCookie(serv, NULL, data, &size); // ------------------------------------------------------------------------ // перебор имён cookie char cookieName[255]; char *ch1, *ch2; ch1 = data; while (1) { // -------------------------------------------------------------------- // имя ch2 = StrStr(ch1, "="); if (!ch2) break; lstrcpyn(cookieName, ch1, ch2 - ch1 + 1); // -------------------------------------------------------------------- //сброс MHTTP_KillCookie(serv, cookieName); // -------------------------------------------------------------------- // следующий cookie ch1 = StrStr(ch1, "; "); if (!ch1) break; ch1 += 2; } heap_free(data); }
|
Самому перенести не удалось сразу. Может кто поможет?
|