2010-02-06 3 views
2

Я использую этот следующий код для отправки простого запроса HTTP:Добавить ЗАГОЛОВОК в HTTP запросе в Java

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(); 
} 

Однако, как вы можете видеть, я не посылаю пользовательский HEADER. Что нужно добавить для отправки пользовательского HEADER?

Приветствия,

Christophe OLIVIER

ответ

5

Когда вы пишете

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

\r\n\r\n бит отправки линии подачи/возврата каретки в конец строки, а затем еще один, чтобы указать, что нет больше заголовков. Это стандарт как в форматах HTTP, так и в электронной почте, т. Е. Пустая строка указывает конец заголовков. Чтобы добавить дополнительные заголовки, вам просто не нужно отправлять эту последовательность, пока не закончите. Вы можете сделать следующее:

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"); 
+0

Большое спасибо, это именно то, что я ищу. – bill0ute

6

Не пытайтесь реализовать протокол HTTP самостоятельно.

Использование HttpComponents от Apache.

(или старше и немного проще в использовании версия - HttpClient)

+0

Hi. Спасибо за этот совет. Кажется, это очень просто и мощно! – bill0ute

0

Если Вы абсолютно должны сделать это самостоятельно вручную он должен следовать этому формату с каждым заголовком на отдельной строке.

имя: значение

Посмотрите в формат заголовка в HTTP спецификации.

http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers

1

Даже если я предлагаю попробовать HttpComponents как уже упоминалось Bozho вместо реализации HTTP самостоятельно, это будет путь, чтобы добавить пользовательский заголовок:

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

В частности, конец раздела заголовка обозначается буквой «\ r \ n \ r \ n», поэтому любая последняя строка заголовка должна заканчиваться в этом или должна сопровождаться другой строкой, обозначающей 'writer.print (" \ r \ n ");' – Jherico

+0

Почти правильно, вам просто нужен другой 'writer.print (" \ r \ n ");' в конце для завершения части заголовка. – x4u

+0

Вы правы. :-) – Malax

1

Вы должны использовать классы уже подготовлен для использования HTTP соединений, таких как HTTPUrlConnection, что является childreon из UrlConnection и имеет этот метод

void setRequestProperty(String key, String value) 

, которые должны быть использованы для установки параметров запроса (например, HEADER поля) .. проверить here для справки

1

Вы также можете увидеть URLConnection.

http://java.sun.com/j2se/1.4.2/docs/api/java/net/URLConnection.html

+0

Привет, я не могу использовать URLConnection, потому что мне нужно привязываться к локальному IP.Мой сервер имеет 5 ips, и мне нужно отправить мой запрос из этого. – bill0ute

+1

@billOute - что? URLConnection отлично справляется с этим. Вам просто нужно использовать разные IP-адреса в URL-адресах! –

Смежные вопросы