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

Foi útil?

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top