Вопрос

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

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

Ваше здоровье,

Кристоф ОЛИВЬЕ

Это было полезно?

Решение

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

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

Другие советы

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

Использование HttpКомпоненты автор: Apache.

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

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

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

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

void setRequestProperty(String key, String value)

это должно быть использовано для установки параметров запроса (например ЗАГОЛОВОК поле)..проверить здесь для справки

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top