HTTP sur C# sockets
Je suis en train d'envoyer la requête HTTP et de recevoir des responce à partir du serveur C# sockets, et je suis de nouveau avec cette langue.
J'ai écrit la suite code (IP réglée correctement):
IPEndPoint RHost = new IPEndPoint(IP, Port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(RHost);
String HTTPRequestHeaders_String = "GET ?q=fdgdfg HTTP/1.0
Host: google.com
Keep-Alive: 300
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Referer: http://google.com/";
MessageBox.Show(HTTPRequestHeaders_String, "Request");
byte[] HTTPRequestHeaders = System.Text.Encoding.ASCII.GetBytes(HTTPRequestHeaders_String);
socket.Send(HTTPRequestHeaders, SocketFlags.None);
String Response = "";
byte[] buffer = new byte[(int) socket.ReceiveBufferSize];
int bytes;
do
{
//On this lane program stops to react
bytes = socket.Receive(buffer);
//This line cannot be reached, tested with breakpoint
Response += Encoding.ASCII.GetString(buffer, 0, bytes);
}
while (bytes >= 0);
MessageBox.Show(Response, "Response");
Ce que je fais mal? J'ai besoin juste de charge complet HTML de la page, ou au moins quelques-uns des personnages de réponse (je ne peux pas faire de même).
Utiliser le
J'irais même plus loin -
J'ai besoin de créer requête HTTP en-têtes comme une chaîne de caractères, est-il possible dans ces classes?
Pourquoi avez-vous besoin pour créer les en-têtes de requête HTTP manuellement?
vous pouvez ajouter des en-têtes comme une chaîne de caractères, voir ma réponse ci-dessous
HttpWebRequest
classe.J'irais même plus loin -
WebClient
...J'ai besoin de créer requête HTTP en-têtes comme une chaîne de caractères, est-il possible dans ces classes?
Pourquoi avez-vous besoin pour créer les en-têtes de requête HTTP manuellement?
vous pouvez ajouter des en-têtes comme une chaîne de caractères, voir ma réponse ci-dessous
OriginalL'auteur Andrew Dryga | 2011-10-17
Vous devez vous connecter pour publier un commentaire.
Je suggère de regarder dans le protocole lui-même, si vous voulez faire ce raw, http://www.w3.org/Protocols/HTTP/1.0/spec.html#Request
Et essayer d'envoyer le CRLF pour mettre fin à la demande 😉
Maintenant, votre problème est résolu, vous avez appris comment créer un en-tête Http à partir de zéro, Il est temps de changer de niveau d'abstraction plus élevé. Comme mentionné précédemment, l'utilisation
HttpWebRequest
ouWebClient
OriginalL'auteur Sabre
OriginalL'auteur Tion
J'ai trouvé le Mentalis Proxy pour être extrêmement utile dans la compréhension de la Requête/Réponse Http cycle au niveau de la socket: http://www.mentalis.org/soft/projects/proxy/
OriginalL'auteur arachnode.net
Il est le
TcpClient
classe qui d'une part permet d'avoir un contrôle total sur la demande (vous créez du corps de la requête sous forme de chaîne) et sur l'autre main est beaucoup plus simple à utiliser qu'un faible niveau de support.http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx
OriginalL'auteur Wiktor Zychla