HTTP Get: Nur download der header? (KOPF wird nicht unterstützt)
In meinem code verwende ich einige Http-Get-request zum download einige Dateien als stream. Ich verwende den folgenden code:
public String getClassName(String url) throws ClientProtocolException, IOException {
HttpResponse response = sendGetRequestJsonText(url);
Header[] all = response.getAllHeaders();
for (Header h : all) {
System.out.println(h.getName() + ": " + h.getValue());
}
Header[] headers = response.getHeaders("Content-Disposition");
InputStreamParser.convertStreamToString(response.getEntity().getContent());
String result = "";
for (Header header : headers) {
result = header.getValue();
}
return result.substring(result.indexOf("''") + "''".length(), result.length()).trim();
}
Aber das lädt den gesamten Inhalt der Antwort. Ich möchte Sie nur abrufen der http-Header ohne Inhalt. Ein HEAD-request scheint nicht zu funktionieren, denn dann bekomme ich den status 501 nicht implementiert. Wie kann ich das tun?
nur nicht die Antwort Lesen Körper?
Ich würde dies tun, wenn ich wüsste wie 😉
Dann bekomme ich eine Fehlermeldung, da der Inhalt nicht konsumiert
Ich würde dies tun, wenn ich wüsste wie 😉
InputStreamParser.convertStreamToString(response.getEntity().getContent());
ist, was liest die Person; Sie können wahrscheinlich einfach nur nicht?Dann bekomme ich eine Fehlermeldung, da der Inhalt nicht konsumiert
InformationsquelleAutor | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt einer GET-Anfrage, könnten Sie in Erwägung ziehen, mal ein KOPF Anfrage:
Das ist lahm. Sie könnte können die
Range
- header zur Anforderung einer 0-0-Bereich des Unternehmens. Aber ich habe noch nie verwendetRange
Header oder teilweisen Antworten, also kann ich nicht wirklich sprechen. Vielleicht kann jemand anders Glockenspiel. Es ist auch möglich, dass der server ignoriert diese Header auch.Jetzt fand ich einen workaround. Ich mache ein get-request, aber sobald ich erhielt den header, ich rufe Abbruch. Ist diese gute Praxis?
Das klingt... lückenhaft. Ich denke, ich weiß nicht, aus der Spitze von meinem Kopf, was die Folgen sein würden, aber es gibt mir eine schlechte Stimmung.
InformationsquelleAutor Rob Hruska
Sie können möglicherweise verwenden Sie die
Bereich
- header in Ihrer Anfrage geben Sie einen Bereich von bytes in der Antwort-Entität. Vielleicht so etwas wie:Wenn es funktioniert, erhalten Sie wieder eine
206 Partial Content
mit den angegebenen bytes in IhremRange
header in der Antwort vorhanden Entität. Allerdings habe ich noch nicht ausprobiert, und es ist auch nicht garantiert arbeiten:Ja, das ist mein denken zu; es ist wahrscheinlich, dass der server nicht zur Verfügung stellt-angesichts der nicht durchgeführten
HEAD
. Als für die 1-byte-Sache, RFE2616 (Abschnitt 14.35.1) sagt: "Wenn die" last-byte-pos-Wert vorhanden ist, MUSS es größer sein als gleich die first-byte-pos, byte-range-spec, oder die byte - range-spec ist syntaktisch ungültig." - mir sagt das, dass eine 0-byte-Bereich gültig ist.0-0 ist gültig, aber es bedeutet 1 byte, 0. byte. Sie können nicht verlangen, dass 0 bytes; ein 206-Antwort kann nicht return 0 bytes. das ist in der Tat ein wenig seltsam. obwohl in der Praxis anfordern, 0 bytes wäre nicht nützlich sein; aber nicht in der Lage, dies zu tun ist im Gegensatz zu Programmierer-Instinkte.
Lesen Sie es wieder, das macht Sinn (da die range ist inklusive). Ich nehme an, wenn die OP ' s versucht, Begrenzung der Anzahl der übertragenen bytes, 0 ist besser als 1 ist besser als 10.000 (oder des gesamten Unternehmens). So könnte es ausreichen, die als "hack" zu reduzieren, die Anzahl der übertragenen bytes.
InformationsquelleAutor Rob Hruska