getResponseCode获取URL响应状态码每次都是返回200是啥原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getResponseCode获取URL响应状态码每次都是返回200是啥原因相关的知识,希望对你有一定的参考价值。

首先:301,302代表的是自动转向,这是由于后台设置时对登陆成功的后续处理,如果有转向肯定是会返回301或302的。 然后如果返回200代表本次http请求已经成功了,在服务器方根本不存在转向,所以也就根本不存在跳转的url,你当然不可能取到,这个... 参考技术A 首先:301,302代表的是自动转向,这是由于后台设置时对登陆成功的后续处理,如果有转向肯定是会返回301或302的。 然后如果返回200代表本次http请求已经成功了,在服务器方根本不存在转向,所以也就根本不存在跳转的url,你当然不可能取到

获取状态码 http.get 响应 angular2

【中文标题】获取状态码 http.get 响应 angular2【英文标题】:Get status code http.get response angular2 【发布时间】:2017-09-26 17:46:13 【问题描述】:

我需要获取以下http调用的状态码,并将其作为字符串返回

//This method must return the status of the http response
confirmEmail(mailToken):Observable<String>

     return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
                     .map(this.extractData)
                     .catch(this.handleError);


谢谢!

【问题讨论】:

【参考方案1】:

使用替换 http 的新 HttpClient 添加 Angular >= 4.3(包括 11)版本的答案

import HttpClientModule from '@angular/common/http'; // Notice it is imported from @angular/common/http instead of @angular/http

如何获取响应代码或任何其他标头:

http.get(
   `$this.baseUrlusers/activate?mailToken=$mailToken`,
    observe: 'response'
)
  .subscribe(response => 
    
    // You can access status:
    console.log(response.status);
    
    // Or any other header:
    console.log(response.headers.get('X-Custom-Header'));
  );

正如@Rbk 的评论中所述,

对象observe: 'response' 使完整响应对象可用。

Check Documentation

【讨论】:

必须明确,要获得完整的http响应对象,选项observe:'response'是这里的决定因素,然后你可以相应地返回完整的响应。没有observe:'response',你赢了'没有得到完整的响应,只有正文数据。 只需将 observe: 'response' 添加到标题【参考方案2】:

只需修改您的代码,将您的 responseStatus 存储在一个字段中:

responseStatus: number;

//This method must return the status of the http response
confirmEmail(mailToken):Observable<String> 
//Edited for working with HttpClient on Angular >= 4.3
  return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken, observe: 'response')
                 .map((response: Response) => 
                   this.responseStatus = response.status;
                   return this.extractData(response);
                 
                 .catch(this.handleError);


然后在你的组件 HTML 模板中显示它:

<p class='responseStatus'>responseStatus</p>

【讨论】:

抱歉问题不恰当,我应该如何将它添加到我的代码中? ,write a method called in the service protected extractData(response: Response) return response.statusText; 我已经有一个同名的方法:private extractData(res: Response) let body; try body = res.json(); catch (err) alert(err.message); return body || ; 所以在您的返回调用中,您返回的主体是响应对象本身,而不仅仅是 statusText ,调用者可以从中提取 statusText ....我想您不仅要返回整个响应状态文本 这样我无法解释来自组件的响应【参考方案3】:

很简单!!

在您的 extractData 函数中

extractData (res)
//res.status  will be your status code
// res.statusText  will be your status Text

【讨论】:

【参考方案4】:

代码如下:

http.get(
   '$this.baseUrlusers/activate?mailToken=$mailToken',
    observe: 'response'
).subscribe(response => 

, error => 
      // You can access status:
      console.log(error.status);
);

以上代码调用实例的subscribe()方法,然后在error通知中,获取状态。

【讨论】:

【参考方案5】:
    confirmEmail(mailToken):Observable<String> 
   return this.http.get(this.baseUrl+"users/activate?mailToken="+mailToken)
     .pipe(map(data => 
       return data.httpStatus
         ));
     .catch(this.handleError);

希望,这会解决您的问题。

【讨论】:

以上是关于getResponseCode获取URL响应状态码每次都是返回200是啥原因的主要内容,如果未能解决你的问题,请参考以下文章

原生socket请求url获取状态码消息报头响应正文

Android之通过HttpURLConnection.getResponseCode状态码抛出异常的问题以及解决方法

HTTP状态码

java啥是响应代码?

从 curl_exec 获取响应代码、标头和内容

react-native fetch 返回状态码 + json