Добавить HEADER в HTTP-запрос в Java - PullRequest
2 голосов
/ 06 февраля 2010

Я использую следующий код для отправки простого 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 ();
}

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

Приветствия

Кристоф Оливье

Ответы [ 6 ]

6 голосов
/ 06 февраля 2010

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

Используйте HttpComponents от Apache.

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

5 голосов
/ 06 февраля 2010

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

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"); 
1 голос
/ 06 февраля 2010

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

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

1 голос
/ 06 февраля 2010

Вы должны использовать классы, уже подготовленные для использования для http-соединений, например HTTPUrlConnection, который является дочерним по отношению к UrlConnection и имеет этот метод

void setRequestProperty(String key, String value)

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

1 голос
/ 06 февраля 2010

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

 writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
 writer.print ("X-MyOwnHeader: SomeValue\r\n");
0 голосов
/ 06 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...