Bonsoir,
Je souhaite réaliser un serveur proxy unix en c, capable de gérer une connexion http 1.1.
Je vous présente un algo qui dans un premier temps gère la connexion jusqu'au serveur web et affiche le résultats (printf) du contenu de la page web reçue au niveau du proxy.
je me suis inspiré de ces morceaux de code : http://beej.us/guide/bgnet/output/ht...l#simpleserver
J'aimerais d'abord savoir si je suis sur la bonne voie. J'aimerais ensuite comprendre comment je peux gérer la connexion persistante (keep-alive) dû à la norme http1.1 qui m'oblige à récupérer tous les éléments de la page web sans avoir à me reconnecter pour chacun de ces éléments.
(les noms dans les parenthèses d'une fonction correspondent aux entrées
les noms à droite de la flèche -> correspondent aux sorties)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Get proxy information : getaddrinfo(port, ProxyHints) -> rv, servinfo (proxyInfo) Get file socket descriptor + bind : for(p=proxyInfo ; ; ) // search the first result socket(p) -> sockProxy <br> Bind(p,sockProxy) Listen(sockProxy) While(1) Accept(sockProxy) -> sockClient //we create a socket to manage the client fork() Close(sockProxy) Recv(sockClient) -> http_request (string) Extract host server name from http_request Get web server information getaddrinfo(host name, port 80, webServerHints) -> rv2, servWebInfo Extract URL from http_request Extract user agent from http_request Create the new request (to send to the web server) for(p2=servWebInfo) // search the first result socket(p2) -> webServerSock //we create a socket to manage the web server connect(webServerSock, servWebInfo) send(new_request) recv(information_from_web_server) printf(information_from_web_server)
Partager