在Android应用程序中访问Web中的响应标头和状态代码?

Posted

技术标签:

【中文标题】在Android应用程序中访问Web中的响应标头和状态代码?【英文标题】:Access response header and status code in web in Android app? 【发布时间】:2015-08-02 00:04:48 【问题描述】:

如何在 android 应用程序的 Web 中访问响应标头和状态代码(以及我知道如何获取的 cookie)?

在我们的应用程序中,我需要通过 Web 登录访问这些数据以进行自定义身份验证,类似于 OAuth,但还需要标头等。这是我认为理所当然的事情,因为我之前在其他平台上没有问题,但不是安卓。为了完成,我通过 Xamarin 包装库完成所有这些工作。

我得到的最接近的方法来自这个问题: Access the http response headers in a WebView? ...但它已经有 4 年历史了,手动拦截可能对我们不起作用,因为我们只使用 URL。我还考虑提示浏览器,但它似乎提供的控制更少。

有没有办法在 Android 中实现这一点?

【问题讨论】:

您能否详细说明为什么“手动拦截可能对我们不起作用,因为我们只使用 URL”?如果您使用 api 22(我对此表示怀疑),那么答案似乎是 4 岁,但您可以覆盖“shouldInterceptRequest(WebView, WebResourceRequest)”。您在 WebResourceRequest 中有标头 链接中建议的手动拦截将仅使用 URL 发送请求,缺少任何 cookie、标头和可能的正文。 不是它没有。建议您负责提供给定 url 的 HttpRequest 和 HttpResponse。您可以完全控制这些,您可以在执行请求之前在请求中设置头部、cookie、正文等,并从 HttpResponse 获取所有必要的资源。 问题是这些信息必须来自某个地方。我没有它们(因此提出了问题)。 对不起,答案还是和4年前一样。 WebView 不提供对响应标头和 HTTP 状态代码的访问。如果您需要访问此数据,则必须使用 HTTP 客户端并自行检索页面。 【参考方案1】:

WebView 不提供对响应标头和 HTTP 状态代码的访问。您必须使用 HTTP 客户端

 private readonly HttpClient client;
 client = new HttpClient();

 private const string Url = "Your Base Url";
 client.BaseAddress = new Uri(Url);

 var response = await client.GetAsync(string.Format("Your Request Url"));
        response.EnsureSuccessStatusCode();

        var header = response.Headers;
        var statusCode = response.StatusCode;
        var requestMessage = response.RequestMessage;

所以从响应对象中你可以得到响应的Header、StatusCode和所有其他的

【讨论】:

以上是关于在Android应用程序中访问Web中的响应标头和状态代码?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript图像 - 响应中的访问标头

Angular 2:无法访问 http 请求中的响应标头

为啥不能通过 IIS7 中的 web.config 删除“服务器”响应标头?

JSON Web 令牌 (JWT):我应该使用响应标头还是正文进行令牌传输?

从跨域 http.get 请求的 ASP.NET Web API 2 响应中获取 Angular 中的特定响应标头(例如 Content-Disposition)

响应标头中的 Azure 无服务器功能启用 CORS