Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. //CLIENT
  2. #include <stdio.h> /* printf, sprintf */
  3. #include <stdlib.h> /* exit, atoi, malloc, free */
  4. #include <unistd.h> /* read, write, close */
  5. #include <string.h> /* memcpy, memset */
  6. #include <sys/socket.h> /* socket, connect */
  7. #include <netinet/in.h> /* struct sockaddr_in, struct sockaddr */
  8. #include <netdb.h> /* struct hostent, gethostbyname */
  9. #include <arpa/inet.h>
  10. #include "helpers.h"
  11. #include "requests.h"
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15. int i;
  16. char *message;
  17. char *response;
  18. int sockfd;
  19.  
  20.  
  21. /*
  22. * Ex 0: Get cs.curs.pub.ro
  23. *
  24. * Pas 1: Se deschide conexiunea (open_connection)
  25. * Pas 2: Se creaza mesajul de request (compute_get_request)
  26. * Pas 3: Se trimite la server mesajul (send_to_server)
  27. * Pas 4: Se primeste raspuns de la server (receive_from_server)
  28. * Pas 5: Se inchide conexiunea cu serverul (close_connection)
  29. */
  30.  
  31. //TODO EX 0
  32. /*sockfd = open_connection("141.85.241.51", 80, AF_INET, SOCK_STREAM, 0);
  33. message = compute_get_request("141.85.241.51", "/", NULL);
  34. send_to_server (sockfd, message);
  35. response = receive_from_server(sockfd);
  36. printf("%s\n", response);
  37. close_connection(sockfd);
  38. *//*
  39. Ex 1: Get videos
  40. */
  41.  
  42. // TODO EX 1
  43. // sockfd = open_connection("185.118.200.37", 8081, AF_INET, SOCK_STREAM, 0);
  44. // message = compute_get_request("185.118.200.37", "/videos", NULL);
  45. // send_to_server (sockfd, message);
  46. // response = receive_from_server(sockfd);
  47. // printf("%s\n", response);
  48. // close_connection(sockfd);
  49.  
  50. /*
  51. EX 2.1: Add video
  52. */
  53.  
  54. // TODO Ex 2.1
  55. // sockfd = open_connection("185.118.200.37", 8081, AF_INET, SOCK_STREAM, 0);
  56. // message = compute_post_request("185.118.200.37", "/videos", "id=10&name=ZZZZZZZZZZZZZ");
  57. // printf("%s\n", message);
  58. // send_to_server (sockfd, message);
  59. // response = receive_from_server(sockfd);
  60. // printf("%s\n", response);
  61. // close_connection(sockfd);
  62.  
  63. /*
  64. Ex 2.2 Verificam noua colectie de videoclipuri
  65. */
  66.  
  67. // TODO Ex 2.2
  68.  
  69. // sockfd = open_connection("185.118.200.37", 8081, AF_INET, SOCK_STREAM, 0);
  70. // message = compute_get_request("185.118.200.37", "/videos", NULL);
  71. // send_to_server (sockfd, message);
  72. // response = receive_from_server(sockfd);
  73. // printf("%s\n", response);
  74. // close_connection(sockfd);
  75.  
  76. /*
  77. Ex 3 Autentificare
  78. */
  79.  
  80. sockfd = open_connection("185.118.200.37", 8081, AF_INET, SOCK_STREAM, 0);
  81. message = compute_post_request("185.118.200.37", "/weather/login", "username=admin&password=p@ss");
  82. send_to_server (sockfd, message);
  83. response = receive_from_server(sockfd);
  84. printf("%s\n", response);
  85. close_connection(sockfd);
  86.  
  87. sockfd = open_connection("185.118.200.37", 8081, AF_INET, SOCK_STREAM, 0);
  88. message = compute_get_request("185.118.200.37", "/weather/key", NULL);
  89. send_to_server (sockfd, message);
  90. response = receive_from_server(sockfd);
  91. printf("%s\n", response);
  92. close_connection(sockfd);
  93.  
  94. sockfd = open_connection("37.139.20.5", 80, AF_INET, SOCK_STREAM, 0);
  95. message = compute_get_request("37.139.20.5", "/data/2.5/weather", "q=bucharest&APPID=80f21fc11662726c0c3c8c5512d89b3a");
  96. send_to_server (sockfd, message);
  97. response = receive_from_server(sockfd);
  98. printf("%s\n", response);
  99. close_connection(sockfd);
  100.  
  101. // TODO Ex 3
  102.  
  103. free(message);
  104. return 0;
  105. }
  106.  
  107.  
  108.  
  109.  
  110. //REQUEST
  111.  
  112.  
  113. #include <stdlib.h> /* exit, atoi, malloc, free */
  114. #include <stdio.h>
  115. #include <unistd.h> /* read, write, close */
  116. #include <string.h> /* memcpy, memset */
  117. #include <sys/socket.h> /* socket, connect */
  118. #include <netinet/in.h> /* struct sockaddr_in, struct sockaddr */
  119. #include <netdb.h> /* struct hostent, gethostbyname */
  120. #include <arpa/inet.h>
  121. #include "helpers.h"
  122. #include "requests.h"
  123.  
  124. char *compute_get_request(char *host, char *url, char *url_params)
  125. {
  126. char *message = calloc(BUFLEN, sizeof(char));
  127. char *line = calloc(LINELEN, sizeof(char));
  128. /*
  129. PAS 1: Scriem numele metodei, calea, parametri din url (daca exista) si tipul protocolului
  130. */
  131. if (url_params != NULL)
  132. {
  133. sprintf(line, "GET %s?%s HTTP/1.1", url, url_params);
  134. }
  135. else
  136. {
  137. sprintf(line, "GET %s HTTP/1.1", url);
  138. }
  139. compute_message(message, line);
  140.  
  141. /*
  142. PAS 2: Adaugam host-ul
  143. */
  144.  
  145. // TODO Ex 0
  146. sprintf(line, "HOST: %s", host);
  147. compute_message(message, line);
  148.  
  149. /*
  150. PAS 3 (optional): Adaugam headere si/ sau cookies, respectand forma protocolului
  151. */
  152. // TODO BONUS COOKIE
  153.  
  154. sprintf(line, "Cookie: isLogged=true");
  155. compute_message(message, line);
  156. /*
  157. PAS 4: Adaugam linia de final
  158. */
  159. strcat(message, "\r\n");
  160. //TODO Ex 0
  161. return message;
  162. }
  163. char *compute_post_request(char *host, char *url, char *form_data)
  164. {
  165.  
  166. char *message = calloc(BUFLEN, sizeof(char));
  167. char *line = calloc(LINELEN, sizeof(char));
  168. /*
  169. PAS 1: Scriem numele metodei, calea si tipul protocolului
  170. */
  171. sprintf(line, "POST %s HTTP/1.1", url);
  172. compute_message(message, line);
  173. // TODO Ex 2
  174.  
  175. /*
  176. PAS 2: Adaugam host-ul
  177. */
  178.  
  179. // TODO Ex 2
  180. sprintf(line, "HOST: %s", host);
  181. compute_message(message, line);
  182. /*
  183. PAS 3: Adaugam headere si/ sau cookies, respectand forma protocolului
  184. ATENTIE!! Headerele Content-Type si Content-Length sunt obligatorii
  185. */
  186. //form data
  187. // TODO Ex 2
  188. sprintf(line, "Content-length: %ld", strlen(form_data));
  189. compute_message(message, line);
  190.  
  191. sprintf(line, "Content-type: application/x-www-form-urlencoded");
  192. compute_message(message, line);
  193. /*
  194. PAS 4: Adaugam linia de final de antent
  195. */
  196. strcat(message, "\r\n");
  197. // TODO Ex 2
  198.  
  199. /*
  200. PAS 5: Adaugam data
  201. */
  202. compute_message(message, form_data);
  203. // TODO Ex 2
  204. return message;
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement