Получение необработанных заголовков ответа HTTP

Там какой-либо путь состоит в том, чтобы получить необработанный ответ http заголовок?

getHeaderField() метод не работает на меня, потому что слюна сервера несколько 'Cookie Набора' и некоторые из них теряется.

10
задан BalusC 21 February 2010 в 22:11
поделиться

2 ответа

Метод getHeaderField () у меня не работает

Вы спрашиваете об этом в контексте java.net.URLConnection , не так ли? Нет, получение необработанных заголовков HTTP-ответа невозможно с соединением URL . Вам нужно будет вернуться к низкоуровневому программированию Socket . Вот SSCCE , просто скопируйте и запустите его.

package com.stackoverflow.q2307291;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class Test {

    public static void main(String[] args) throws IOException {
        String hostname = "stackoverflow.com";
        int port = 80;

        Socket socket = null;
        PrintWriter writer = null;
        BufferedReader reader = null;

        try {
            socket = new Socket(hostname, port);
            writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer.println("GET / HTTP/1.1");
            writer.println("Host: " + hostname);
            writer.println("Accept: */*");
            writer.println("User-Agent: Java"); // Be honest.
            writer.println(""); // Important, else the server will expect that there's more into the request.
            writer.flush();

            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            for (String line; (line = reader.readLine()) != null;) {
                if (line.isEmpty()) break; // Stop when headers are completed. We're not interested in all the HTML.
                System.out.println(line);
            }
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
            if (writer != null) { writer.close(); }
            if (socket != null) try { socket.close(); } catch (IOException logOrIgnore) {} 
        }
    }

}

Чтобы избежать перегрузки SO всеми, кто пробует этот фрагмент, вот как будет выглядеть результат:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Expires: Sun, 21 Feb 2010 20:39:08 GMT
Server: Microsoft-IIS/7.5
Date: Sun, 21 Feb 2010 20:39:07 GMT
Connection: close
Content-Length: 208969

Чтобы узнать больше об отправке HTTP-запросов низкоуровневым способом, прочтите спецификацию HTTP .

Однако вы, вероятно, захотите использовать метод getHeaderFields () вместо получения заголовка с несколькими значениями. getHeaderField () возвращает только последнее значение, как указано в связанной документации API.

List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
34
ответ дан 3 December 2019 в 13:40
поделиться

use document.getElityStartId («my») .style.display = «none»; не следует отображать только элемент, но при дисплее удалить пространство, полученное элементом.

-121--1223884-

Было ли ранее назначено studentDB- > имя ? Если вы не выделили память для этого поля, скорее всего, когда вы позвонили бесплатно , вы окажетесь с seg-fault! Проверьте это поле и убедитесь, что оно имеет значение malloc d или strdup d.

Или что есть коррупция в другом месте кучи, что совпало с этим, как вы справедливо указали, вы можете видеть значение имя ...

Надеюсь, что это поможет, С уважением, Том.

-121--3579300-

Простой способ состоит в использовании метода getHeeyFields () метода URLConnection . Вот какой-то код, который делает что-то эквивалентное.

static String[] getHeaders(HttpURLConnection con, String header) {
  List<String> values = new ArrayList<String>();
  int idx = (con.getHeaderFieldKey(0) == null) ? 1 : 0;
  while (true) {
    String key = con.getHeaderFieldKey(idx);
    if (key == null)
      break;
    if (header.equalsIgnoreCase(key))
      values.add(con.getHeaderField(idx));
    ++idx;
  }
  return values.toArray(new String[values.size()]);
}
2
ответ дан 3 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: