1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| void page::pageok(string wikiPageName,bool edit)
{
socketCrea();
pageName=wikiPageName;
if(edit)
pageAdresse="/w/wiki.phtml?title="+wikiPageName+"&action=edit";
else
pageAdresse="/wiki/"+wikiPageName;
resume("");
minoredit(true);
watch(false);
getPage();
}
void page::socketCrea()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,2), &WSAData);
SOCKADDR_IN sin;
sin.sin_addr = resolve("fr.wikipedia.org");
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
cout<<"\tcreation du socket";
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock < 0) // Au cas ou la création de la socket ne fonctionnerais pas
{
cerr<<"\nImpossible de creer la socket\n";
exit(1);
}
cout<<"\r[ok]\n\tconnection au serveur";
if (connect(sock,(struct sockaddr *)&sin, sizeof sin) < 0)
{
cerr<<"\nImpossible de se connecter au serveur\n";
exit(1);
}
cout<<"\r[ok]\n\n";
}
struct in_addr page::resolve (char *name) //code faity par quelqu'un d'autre
{
static struct in_addr in;
unsigned long l;
struct hostent *ent;
if ((l = inet_addr(name)) != INADDR_NONE)
{
in.s_addr = l;
return in;
}
if (!(ent = gethostbyname(name)))
{
in.s_addr = INADDR_NONE;
return in;
}
return *(struct in_addr *)ent->h_addr;
}
void page::login()
{
string requete, entete, corp;
char messchar[10000];
requete="POST /w/wiki.phtml?title=Special:Userlogin&action=submitlogin HTTP/1.0\r\n";
corp="wpName=UserName&wpPassword=PassWord&wpRemember=1&wpLoginattempt=Identification";
entete="Host: fr.wikipedia.org\r\n"
"User-Agent: djobot\r\n"
"Content-type: application/x-www-form-urlencoded\r\n"
"Content-Length: "+str(corp.length())+"\r\n\r\n";
requete=requete+entete+corp;
cout<<"\n\tenvois de requete login ";
send(sock, requete.c_str(), requete.length(),0);
cout<<"\r[ok]\n";
cout<<"\tattente reponse du serveur";
recv(sock, messchar, 10000, 0);
cout<<"\r[ok]\n\n";
requete=messchar;
cookie=requete.substr(requete.find("Set-Cookie: ")+12);
cookie=cookie.substr(0,cookie.find_first_of('\n'));
cookie="cookie: "+cookie;
}
void page::sendPage()
{
string requete, entete, corp;
char messchar[10000];
cout<<"\n\t\t***requete***\n\t**POST page: "<<pageName;
requete="POST wiki.phtml?title="+pageName+"&action=submit HTTP/1.0\r\n";
corp="\r\nwpTextbox1="+article+"&wpEdittime="+Edittime+"&wpSummary="+Summary+
"&wpMinoredit="+Minoredit+"&wpWatchthis="+Watch+"&wpSave=Sauvegarder\r\n\r\n";
entete="Host: fr.wikipedia.org\r\n"
"User-Agent: djobot\r\n"
"Content-type: multipart/form-data"
"Content-Length: "+str(corp.length())+"\r\n";
requete=requete+entete+cookie+corp;
cout<<"\n\tenvois de la page ";
send(sock, requete.c_str(), requete.length(),0);
cout<<"\r[ok]\n";
cout<<"\tattente reponse du serveur";
recv(sock, messchar, 10000, 0);
cout<<"\r[ok]\n\n";
requete=messchar;
cout<<requete;
}
void page::getPage()
{
string requete, entete;
char messchar[100000];
cout<<"\n\t\t***requete***\n\t**GET page: "<<pageName<<"\n a l'adresse: "<<pageAdresse;
requete="GET "+pageAdresse+" HTTP/1.0\r\n";
entete="Host: fr.wikipedia.org\r\n"
"User-Agent: djobot\r\n";
requete=requete+entete+cookie+"\r\n\r\n";
cout<<"\n\n\tenvois de la requete";
send(sock, requete.c_str(), requete.length(),0);
cout<<"\r[ok]\n";
cout<<"\tattente reponse du serveur";
recv(sock, messchar, 100000, 0);
cout<<"\r[ok]\n";
fullPage=messchar;
} |
Partager