[Socket] Répondre à une requête HTTP

Répondre à une requête HTTP [Socket] - Divers - Programmation

Marsh Posté le 17-07-2004 à 18:15:36    

Je suis en train de faire une appli telnet. Et vu qu'elle va tourner sur le port 80, je voudrais faire en sorte de rejeter les navigateurs HTTP proprement.
 
Voici mon code :
 

Code :
  1. else if (input.IndexOf("HTTP" ) > -1 && input.IndexOf("GET " ) == 0)
  2.   {
  3.    System.Console.WriteLine("http client" );
  4.    serverStreamWriter.WriteLine("\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title>MagicMUD</title></head><body>This server doesn't run a HTTP server. Please use a telnet client to use it!</body></html>" );
  5.    serverStreamWriter.Flush();
  6.    // Total n'importe quoi ?
  7.    serverStreamReader.Close();
  8.    serverStreamWriter.Close();
  9.    serverSocket.Shutdown(System.Net.Sockets.SocketShutdown.Both);
  10.    tcpServerListener.Stop();
  11.    System.Diagnostics.EventLog.WriteEntry("MagicMUD", "Client was a HTTP client", System.Diagnostics.EventLogEntryType.Information, 15);
  12.    return false;
  13.   }


 
Seulement, il y a un truc qui manque, car IE ne reçoit rien, et charge indéfiniment.
Pourtant, le serveur tourne correctement. Une requête HTTP envoyée par telnet me retourne bien le résulat.
Qu'est-ce qu'il manque ?
 
Lorsque je fait un telnet sur forum.hardware.fr, j'obtiens ceci :
 


<html>
      <head>
            <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://forum.hardware.fr/forum.php3">
                                                                                           </HEAD>
                                                                                                  <body>
                                                                                                        </body>
                                                                                                               </html>


 
Perte de la connexion à l'hôte.
 
La même sur mon serveur :
 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title>MagicMUD</title></head><body>This serve
r doesn't run a HTTP server. Please use a telnet client to use it!</body></html>
 
 
Perte de la connexion à l'hôte.


 
Soit la même chose :sweat:
 
Et pourtant HFR ça marche et pas moi :cry:
 
Par contre, un GET / sur mon site (IIS) ne produit rien, au bout du timeout, je reçois un BadRequest error :sweat: Donc impossible de savoir ce que renvois IIS (il doit y avoir des headers HTTP c'est pas possible autrement)

Reply

Marsh Posté le 17-07-2004 à 18:15:36   

Reply

Marsh Posté le 17-07-2004 à 18:22:34    

Groumpf !
 
Je réponds ça maintenant :
 
serverStreamWriter.WriteLine("HTTP/1.1\nContent-Type: text/html\nConnection: close\nContent-Length: 202\n\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title>MagicMUD</title></head><body>This server doesn't run a HTTP server. Please use a telnet client to use it!</body></html>" );
 
Et c'est OK.
 
C'est quoi le vrai code HTTP pour dire que c'est OK ? 200 ?
 
Et c'est quoi le vrai truc message associé ?
 
Je me suis basé sur l'erreur 400 que renvoie IIS :
 

HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Sat, 17 Jul 2004 16:17:35 GMT
Connection: close
Content-Length: 39
 
<h1>Bad Request (Invalid Hostname)</h1>
 
Perte de la connexion à l'hôte.


 
A noter que la version d'Appache qui est sur HFR est buggée, car elle fait une réponse HTTP erronnée lorsque le client fait une requête erronnée :D (oeil pour oeil, dent pour dent :D)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed