如何从HttpURLConnection读取完整响应?

我在andorid中制作了一些代理服务器来修改http标头,它可以正常工作,但是我必须将完整的响应转发到“顶层”。

如何从HttpURLConnection读取整个响应(所有标头,内容,所有内容)?

HttpURLConnection httpURLConnection;

URL url = new URL(ADDRESS);

httpURLConnection = (HttpURLConnection) url.openConnection();

// add headers, write output stream, flush

if (httpURLConnection.getResponseCode() == HttpsURLConnection.HTTP_OK)

{

Map<String, List<String>> map = httpURLConnection.getHeaderFields();

System.out.println("Printing Response Header...\n");

for (Map.Entry<String, List<String>> entry : map.entrySet())

{

System.out.println("Key : " + entry.getKey() + " ,Value : " + entry.getValue());

}

return new DataInputStream(httpURLConnection.getInputStream());

}

在getInputStream中,我仅收到内容,是否有可能包含某些内容?

回答:

无法直接使用来转储完整的HTTP响应HttpURLConnection,但是您可以使用其各种方法来重构它。例如,

HttpURLConnection httpURLConnection;

URL url = new URL("http://www.google.com");

httpURLConnection = (HttpURLConnection) url.openConnection();

StringBuilder builder = new StringBuilder();

builder.append(httpURLConnection.getResponseCode())

.append(" ")

.append(httpURLConnection.getResponseMessage())

.append("\n");

Map<String, List<String>> map = httpURLConnection.getHeaderFields();

for (Map.Entry<String, List<String>> entry : map.entrySet())

{

if (entry.getKey() == null)

continue;

builder.append( entry.getKey())

.append(": ");

List<String> headerValues = entry.getValue();

Iterator<String> it = headerValues.iterator();

if (it.hasNext()) {

builder.append(it.next());

while (it.hasNext()) {

builder.append(", ")

.append(it.next());

}

}

builder.append("\n");

}

System.out.println(builder);

版画

200 OK

X-Frame-Options: SAMEORIGIN

Transfer-Encoding: chunked

Date: Tue, 07 Jan 2014 16:06:45 GMT

P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."

X-XSS-Protection: 1; mode=block

Expires: -1

Alternate-Protocol: 80:quic

Set-Cookie: NID=67=OIu8_xhcxE-UPCSfIoTINvRyOe4ALVhIqan2NUI6LMdRkSJHTPGvNkYeYE--WqPSEPK4c4ubvmjWGUyFgXsa453KHavX9gUeKdzfInU2Q25yWP3YtMhsIhJpUQbYL4gq; expires=Wed, 09-Jul-2014 16:06:45 GMT; path=/; domain=.google.ca; HttpOnly, PREF=ID=4496ed99b812997d:FF=0:TM=1389110805:LM=1389110805:S=jxodjb3UjGJSZGaF; expires=Thu, 07-Jan-2016 16:06:45 GMT; path=/; domain=.google.ca

Content-Type: text/html; charset=ISO-8859-1

Server: gws

Cache-Control: private, max-age=0

然后,您可以获取InputStream并打印其内容。

以上是 如何从HttpURLConnection读取完整响应? 的全部内容, 来源链接: utcz.com/qa/413841.html

回到顶部