ModestGenius

Web page downloader

May 9th, 2018
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. //./client mech.math.msu.su http://mech.math.msu.su/~vvb/1course/index.html
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <string.h>
  5. #include <string>
  6. #include <stdlib.h>
  7. #include <unistd.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10. #include <netdb.h>
  11. using namespace std;
  12. int main(int argc, char* argv[]) {
  13.     if(argc<3)
  14.         return 1;
  15.     string peerHost = argv[1]; // = "mech.math.msu.su";
  16.     string url = argv[2]; //= "http://mech.math.msu.su/~vvb/1course/index.html";
  17.     int peerPort = 80;
  18.     //cin>>peerHost;
  19.     //cin>>url;
  20.     //cin>>peerPort;
  21.  
  22.     int s0 = socket(AF_INET, SOCK_STREAM, 0);
  23.     struct hostent *host = gethostbyname(peerHost.c_str());
  24.     if (host == NULL) {
  25.         perror("Cannot define host address"); exit(1);
  26.     }
  27.     struct sockaddr_in peeraddr;
  28.     memset(&peeraddr, 0, sizeof(peeraddr));
  29.     peeraddr.sin_family = AF_INET;
  30.     peeraddr.sin_port = htons(peerPort);
  31.     memmove(&(peeraddr.sin_addr.s_addr), host->h_addr_list[0], 4);
  32.     printf(
  33.         "peer addr = %d.%d.%d.%d, port %d\n",
  34.         host->h_addr_list[0][0] & 0xff,
  35.         host->h_addr_list[0][1] & 0xff,
  36.         host->h_addr_list[0][2] & 0xff,
  37.         host->h_addr_list[0][3] & 0xff,
  38.         (int) peerPort
  39.     );
  40.  
  41.     int res = connect(s0,(struct sockaddr*) &peeraddr, sizeof(peeraddr));
  42.     if (res < 0) {
  43.         perror("Cannot connect!"); exit(1);
  44.     }
  45.     printf("Connected. Reading a server message.\n");
  46.     string s = "GET " + url + " HTTP/1.1 \r\nHost: " + peerHost +
  47.     "\r\n\r\n";
  48.     write(s0, s.c_str(), strlen(s.c_str()));
  49.  
  50.     FILE * pFile = fopen ( "file.html" , "w+" );
  51.     char buffer[1];
  52.     bool flag = false;
  53.     // char prev;
  54.     while (read(s0,buffer,1) > 0) {
  55.         printf("%s", buffer);
  56.         //if(buffer[0]=='\n'&&prev=='\n'||buffer[0]=='\r'&&prev=='\n'||buffer[0]=='\n'&&prev=='\r'||buffer[0]=='\r'&&prev=='\r')
  57.         if(buffer[0]=='<') flag = true;
  58.         if(flag)
  59.         fwrite(buffer , 1, sizeof(buffer) , pFile);
  60.         //prev = buffer[0];
  61.     }
  62.  
  63.     close(s0);
  64.     fclose (pFile);
  65.     return 0;
  66. }
Add Comment
Please, Sign In to add comment