2 * Windows
\97pCookie
\8eæ
\93¾
\83v
\83\8d\83O
\83\89\83\80\r
3 * copyright (c) 2008
\83Õ
\81i
\83v
\83T
\83C
\81j
\r
5 * IE
\82Ì
\83N
\83b
\83L
\81[
\82ð
\8eæ
\93¾
\82µ
\82Ä
\95\
\8e¦
\82·
\82é
\83v
\83\8d\83O
\83\89\83\80\82Å
\82·
\81B
\r
7 *
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82Í
\81u
\82³
\82«
\82ã
\82Î
\82·
\81v
\82Ì
\88ê
\95\94\82Å
\82 \82è
\81A
\r
8 *
\82±
\82Ì
\83\
\81[
\83X
\83R
\81[
\83h
\82ÍGPL
\83\89\83C
\83Z
\83\93\83X
\82Å
\94z
\95z
\82³
\82ê
\82Ü
\82·
\82Å
\82·
\81B
\r
10 #include <windows.h>
\r
13 //
\83j
\83R
\83j
\83R
\93®
\89æURL
\r
14 #define NICO_URL "http://www.nicovideo.jp/"
\r
15 //
\94O
\82Ì
\82½
\82ß
\88ê
\89ñ
\8dí
\8f\9c\82·
\82é
\82½
\82ß
\82Ì
\8eg
\82¤
\83N
\83b
\83L
\81[
\81B
\r
16 #define NICO_CLEAR_COOKIE "dummy; expires=Thu, 1-Jan-1970 00:00:00 GMT; domain=.nicovideo.jp; path=/;"
\r
17 #define COOKIE_MAX 4096
\r
19 int getCookie(void* dynamic){
\r
20 //
\83N
\83b
\83L
\81[
\8eæ
\93¾
\8aÖ
\90\94\82ð
\8eæ
\93¾
\r
21 int (*get_cookie)(const char* url,const char* str,char* buff,int* size) = (void*)GetProcAddress((HMODULE)dynamic, "InternetGetCookieA");
\r
23 fputs("failed to load InternetGetCookieA",stderr);
\r
26 //
\83o
\83b
\83t
\83@
\97p
\83\81\83\82\83\8a\82Ì
\8am
\95Û
\81B
\r
27 char* str = malloc(COOKIE_MAX);
\r
29 fputs("failed to malloc memory",stderr);
\r
32 int size = COOKIE_MAX;
\r
33 if(get_cookie(NICO_URL,NULL,str,&size)){
\r
35 }else if(size > COOKIE_MAX){//
\83o
\83b
\83t
\83@
\82ª
\91«
\82è
\82È
\82
\82Ä
\8e¸
\94s
\82µ
\82½
\82Æ
\8ev
\82í
\82ê
\82é
\81B
\r
36 //
\83o
\83b
\83t
\83@
\8dÄ
\8am
\95Û
\r
37 str = realloc(str,size);
\r
39 fputs("failed to realloc memory",stderr);
\r
42 if(get_cookie(NICO_URL,NULL,str,&size)){
\r
44 }else{//
\82È
\82ñ
\82©
\83\
\81[
\83X
\82ª
\91½
\8f
\89\98\82¢
\82¯
\82Ç
\93®
\82¯
\82Î
\82æ
\82ë
\82µ
\81B
\r
45 fputs("failed to get cookie",stderr);
\r
50 fputs("failed to get cookie",stderr);
\r
58 int setCookie(void* dynamic,const char* str){
\r
59 //
\83N
\83b
\83L
\81[
\8eæ
\93¾
\8aÖ
\90\94\82ð
\8eæ
\93¾
\r
60 int (*set_cookie)(const char* url,const char* name,const char* data) = (void*)GetProcAddress((HMODULE)dynamic, "InternetSetCookieA");
\r
62 fputs("failed to load InternetGetCookieA",stderr);
\r
65 //
\96¼
\91O
\82Æ
\83f
\81[
\83^
\82Ì
\95ª
\97£
\r
67 int length = strlen(str);
\r
68 char* tmp = malloc(length+1);
\r
69 memcpy(tmp,str,length);
\r
73 for(i=0;i<length;i++){
\r
81 fputs("Cookie str is invalid.",stderr);
\r
85 //
\93o
\98^
\82·
\82é
\91O
\82É
\82Æ
\82è
\82 \82¦
\82¸
\8dí
\8f\9c\82µ
\82Ä
\82Ý
\82é
\r
86 if(set_cookie(NICO_URL,name,NICO_CLEAR_COOKIE) == FALSE){
\r
87 fputs("failed to clear cookie.",stderr);
\r
91 //
\8eÀ
\8dÛ
\82É
\93o
\98^
\82µ
\82Ä
\82Ý
\82é
\r
92 if(set_cookie(NICO_URL,name,data) == TRUE){
\r
96 fputs("failed to set cookie.",stderr);
\r
102 int main(int argc,char* argv[]){
\r
103 //wininet.dll
\82Ì
\83_
\83C
\83i
\83~
\83b
\83N
\93Ç
\82Ý
\8d\9e\82Ý
\81B
\r
104 void* dynamic = (void*)LoadLibrary("wininet.dll");
\r
106 fputs("failed to load wininet.dll",stderr);
\r
110 if(argc > 1){/* set
\82·
\82é
\83N
\83b
\83L
\81[
\82ª
\91¶
\8dÝ
\82·
\82é */
\r
111 ret = setCookie(dynamic,argv[1]);
\r
112 }else{/*
\91¶
\8dÝ
\82µ
\82È
\82¢*/
\r
113 ret = getCookie(dynamic);
\r
115 //
\8aJ
\95ú
\81A
\8fI
\97¹
\81B
\r
116 FreeLibrary((HMODULE)dynamic);
\r