【问题标题】:Android Code to Get HTTP Header Info of a Web Sites获取网站 HTTP 标头信息的 Android 代码
【发布时间】:2014-04-07 09:40:20
【问题描述】:

我正在开发一个 android 应用程序,其中我需要通过我的 android 活动获取网站的 HTTP 标头,在下面引用的链接中我找到了代码但没有获取所有标头。

http://www.mkyong.com/java/how-to-get-http-response-header-in-java/

我需要如下图所示的结果


(来源:osxdaily.com

请支持。

【问题讨论】:

  • 真正的问题是什么?
  • @Sreekanthss -i 需要通过 android 获取网站的标头详细信息,因为我们在 C#.net 上使用此命令“foreach(Request.ServerVariables 中的字符串 var){ Response.Write(var + " " + 请求[var] + "
    "); }"

标签: android android-activity get-headers


【解决方案1】:

查看同样适用于 android 的 java 示例代码:

方法一

URL url = new URL("http://www.google.com:80");
URLConnection conn = url.openConnection();

Map<String, List<String>> headerFields = conn.getHeaderFields();

Set<String> headerFieldsSet = headerFields.keySet();
Iterator<String> hearerFieldsIter = headerFieldsSet.iterator();

while (hearerFieldsIter.hasNext()) {

    String headerFieldKey = hearerFieldsIter.next();
    List<String> headerFieldValue = headerFields.get(headerFieldKey);

    StringBuilder sb = new StringBuilder();
    for (String value : headerFieldValue) {
        sb.append(value);
        sb.append("");
    }

    System.out.println(headerFieldKey + "=" + sb.toString());

}

方法 2(参考:Get headers from HttpClient in android

HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet("http://mkyong.com");
HttpResponse response = client.execute(request);

//get all headers       
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
    System.out.println("Key : " + header.getName() 
      + " ,Value : " + header.getValue());
}

//get header by 'key'
String server = response.getFirstHeader("Server").getValue();

希望对你有所帮助..

【讨论】:

  • 谢谢,但我没有得到网站的所有标题,因为我们在 C#.net 上使用这个命令 "foreach (string var in Request.ServerVariables) { Response.Write(var + " " + 请求[var] + "
    "); }"
【解决方案2】:

假设你有

HttpResponse response ;

然后做。(对于特定的标题)

Header[] headers = response.getHeaders("Server");
        if (headers.length > 0) {
            String value = headers[0].getValue();

并检索所有标题

Header[] headers = response.getAllHeaders();

for(int i =0 ; i<headers.length;i++)
{
System.out.println("header : "+i+" - > "+headers[i]);
}

【讨论】:

  • 谢谢,但我没有得到网站的所有标题,因为我们在 C#.net 上使用这个命令 "foreach (string var in Request.ServerVariables) { Response.Write(var + " " + 请求[var] + "
    "); }" –
【解决方案3】:

根据 http post 或 get 您可以使用 getAllHeaders 或 getHeaders 方法。这是一个http post的例子。

HTTP POST 方法:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL);

第一种方法:

public Header[] getAllHeaders () 
Added in API level 1
Returns all the headers of this message. Headers are orderd in the sequence they will be sent over a connection.

Returns
all the headers of this message 

第二种方法说明:

public Header[] getHeaders (String name) 
Added in API level 1
Returns all the headers with a specified name of this message. Header values are ignored. Headers are orderd in the sequence they will be sent over a connection.

Parameters
name  the name of the headers to return. 

Returns
the headers whose name property equals name. 

【讨论】:

    【解决方案4】:

    试试这个:

    1. HttpResponse 响应; // http响应

    2. 从响应中获取实体

      final HttpEntity entity = response.getEntity();
      if(entity == null) {
          return;
      }
      
    3. 从实体中获取 Header 对象。 Refer this

      final Header header = entity.getContentEncoding();
      if (header == null) {
          return;
      }
      
    4. 获取每个标题元素Refer this

      for (HeaderElement h : header.getElements()) {
          if (h.getName().equalsIgnoreCase(HEADER_PARAMETER_VALUE)) {
              h.getValue();
              return;
          }
      }
      

    【讨论】:

    • 谢谢,但我没有得到网站的所有标题,因为我们在 C#.net 上使用这个命令 "foreach (string var in Request.ServerVariables) { Response.Write(var + " " + 请求[var] + "
      "); }"
    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多