getHeaderField()
El método no funciona para mí
Estás haciendo esto en el contexto de java.net.URLConnection
, ¿verdad? No, la obtención de los encabezados de respuesta HTTP sin formato no es posible con URLconnection
. Tendrá que recurrir a la programación de bajo nivel de Socket. Aquí hay un SSCCE, solo copielo para pegarlo.
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) {}
}
}
}
evitar para ser sobrecargado por todo el mundo tratando este fragmento, así es como la salida se verá así:
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
Para obtener más información sobre el envío de peticiones HTTP el camino de bajo nivel, leer el HTTP specification.
Sin embargo, probablemente desee utilizar el método getHeaderFields()
para recuperar un encabezado con varios valores. El getHeaderField()
solo devuelve el último valor, según el documento API vinculado.
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
Parece que está utilizando una biblioteca como Apache HTTP Client? Sería útil indicarlo en caso afirmativo, ya que supongo que está preguntando si esa biblioteca en particular tiene dicho método. –
Sería útil, pero creo que no está utilizando el cliente de Apache sino la biblioteca estándar de Java: http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getHeaderField(java.lang. String) – thermz