Adicionar cabeçalho na solicitação HTTP em Java
-
19-09-2019 - |
Pergunta
Estou usando este código a seguir para enviar simples pedido 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 ();
}
No entanto, como você pode ver, eu não enviar um cabeçalho personalizado. O que devo acrescentar para enviar um cabeçalho personalizado?
Cheers,
Christophe OLIVIER
Solução
Quando você escreve
writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n");
O bit \r\n\r\n
está a enviar um / transporte de retorno de avanço de linha para terminar a linha e, em seguida, um outro para indicar que não há mais cabeçalhos. Este é um padrão em ambos os formatos de HTTP e de e-mail, ou seja, uma linha em branco indica o fim de cabeçalhos. Para adicionar cabeçalhos adicionais você só precisa não enviar essa seqüência até que você está feito. Você pode fazer o seguinte em vez
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");
Outras dicas
Não tente implementar o protocolo HTTP-se.
Use HttpComponents pelo Apache.
(ou seu mais velho e um pouco mais fácil para a versão uso - HttpClient )
Mesmo que eu sugiro experimentar HttpComponents como mencionado por Bozho em vez de implementar HTTP por si mesmo, este é seria a maneira de adicionar um cabeçalho personalizado:
writer.print ("GET " + szUrl + " HTTP/1.0\r\n");
writer.print ("X-MyOwnHeader: SomeValue\r\n");
Você deve usar as classes já preparados para ser usado para conexões HTTP, como HTTPUrlConnection
que é um childreon de UrlConnection
e tem este método
void setRequestProperty(String key, String value)
que deve ser usado para definir parâmetros do pedido (como Cabeçalho campo) .. verificação aqui para referência
Você também pode ver URLConnection.
http: //java.sun .com / J2SE / 1.4.2 / docs / api / java / net / URLConnection.html
Se você absolutamente tem que fazê-lo sozinho com a mão deve seguir este formato com cada cabeçalho em sua própria linha.
name: value
Olhe para o formato de cabeçalho em HTTP spec.
http: // www .w3.org / Protocols / HTTP / 1.0 / draft-IETF-http-spec.html # Message-cabeçalhos