Question

J'utilise ce code ci-dessous pour envoyer simple requête HTTP:

try
{
    Socket  s = new Socket ();
    s.bind    (new InetSocketAddress (ipFrom, 0));
    s.connect (new InetSocketAddress (ipTo,   80), 1000);

    PrintWriter     writer = new PrintWriter    (s.getOutputStream ());
    BufferedReader  reader = new BufferedReader (new InputStreamReader (s.getInputStream ()));

    writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
    writer.flush ();

    s     .close ();
    reader.close ();
    writer.close ();
}

Cependant, comme vous pouvez le voir, je n'envoie pas un en-tête personnalisé. Que dois-je ajouter à envoyer un en-tête personnalisé?

Cheers,

Christophe OLIVIER

Était-ce utile?

La solution

Lorsque vous écrivez

writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 

Le bit \r\n\r\n envoie un retour chariot ligne d'alimentation / de mettre fin à la ligne, puis une autre pour indiquer qu'il n'y a pas plusieurs en-têtes. Ceci est une norme dans les deux formats HTTP et e-mail, à savoir une ligne blanche indique la fin des en-têtes. Pour vous ajouter des en-têtes supplémentaires suffit de ne pas envoyer cette séquence jusqu'à ce que vous avez terminé. Vous pouvez faire ce qui suit à la place

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("header1: value1\r\n"); 
writer.print ("header2: value2\r\n"); 
writer.print ("header3: value3\r\n"); 
// end the header section
writer.print ("\r\n"); 

Autres conseils

Ne pas essayer de mettre en œuvre le protocole HTTP vous.

Utilisez HttpComponents par Apache.

(ou son ancien et un peu plus facile à utiliser la version - HttpClient )

Même si je suggère d'essayer HttpComponents comme mentionné par Bozho au lieu de cela est la mise en œuvre HTTP par vous-même, serait le moyen d'ajouter un en-tête personnalisé:

 writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
 writer.print ("X-MyOwnHeader: SomeValue\r\n");

Vous devez utiliser des classes déjà préparées à utiliser pour les connexions http, comme HTTPUrlConnection qui est un childreon de UrlConnection et a cette méthode

void setRequestProperty(String key, String value)

qui doit être utilisé pour définir les paramètres de la demande (comme HEADER champ ) .. vérifier ici pour référence

Si vous devez absolument faire vous-même à la main, il doit suivre ce format avec chaque en-tête sur sa propre ligne.

  

nom: valeur

Regardez dans le format d'en-tête dans spécification HTTP.

http: // www .w3.org / Protocoles / HTTP / 1.0 / draft-ietf-http-spec.html # message-têtes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top