处理HTTP状态码
1.1.4 处理HTTP状态码
上一节介绍HttpClient访问Web资源的时候,涉及HTTP状态码。比如下面这条语句:
int statusCode=httpClient.executeMethod
(getMethod);//回车,获得响应状态码
HTTP状态码表示HTTP协议所返回的响应的状态。比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。如果请求的资源不存在,则通常返回404错误。
HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成。1XX通常用作实验用途。这一节主要介绍2XX、3XX、4XX、5XX等常用的几种状态码,如表1.1所示。
表1.1 HTTP常用状态码
|
状态代码 |
代码描述 |
处理方式 |
|
200 |
请求成功 |
获得响应的内容, 进行处理 |
|
201 |
请求完成,结果是创建了新资源。 新创建资源的URI可在响 应的实体中得到 |
爬虫中不会遇到 |
|
202 |
请求被接受,但处理尚未完成 |
阻塞等待 |
|
204 |
服务器端已经实现了请求, 但是没有返回新的信息。如果 客户是用户代理,则无须为此 更新自身的文档视图 |
丢弃 |
|
300 |
该状态码不被HTTP/1.0的应 用程序直接使用,只是作为 3XX类型回应的默认解释。 存在多个可用的被请求资源 |
若程序中能够处理, 则进行进一步处理, 如果程序中不能 处理,则丢弃 |
|
301 |
请求到的资源都会分配一 个永久的URL,这样就可以 在将来通过该URL来访问此资源 |
重定向到分配的URL |
|
302 |
请求到的资源在一个不同 的URL处临时保存 |
重定向到临时的URL |
|
304 |
请求的资源未更新 |
丢弃 |
|
400 |
非法请求 |
丢弃 |
|
401 |
未授权 |
丢弃 |
|
403 |
禁止 |
丢弃 |
|
404 |
没有找到 |
丢弃 |
|
5XX |
回应代码以“5”开头的状态 码表示服务器端发现自己出现错误, 不能继续执行请求 |
丢弃 |
当返回的状态码为5XX时,表示应用服务器出现错误,采用简单的丢弃处理就可以解决。
当返回值状态码为3XX时,通常进行转向,以下是转向的代码片段,读者可以和上一节的代码自行整合到一起:
//若需要转向,则进行转向操作
if ((statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
|| (statusCode == HttpStatus.SC_MOVED_PERMANENTLY)
|| (statusCode == HttpStatus.SC_SEE_OTHER) ||
(statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
//读取新的URL地址
Header header = postMethod.getResponseHeader("location");
if(header!=null){
String newUrl = header.getValue();
if(newUrl==null||newUrl.equals("")){
newUrl="/";
//使用post转向
PostMethod redirect = new PostMethod(newUrl);
//发送请求,做进一步处理……
}
}
}
当响应状态码为2XX时,根据表1.1的描述,我们只需要处理200和202两种状态码,其他的返回值可以不做进一步处理。200的返回状态码是成功状态码,可以直接进行网页抓取,例如:
//处理返回值为200的状态码
if (statusCode == HttpStatus.SC_OK) {
input = postMethod.getResponseBodyAsStream();
//得到文件名
String filename = path.substring(path.lastIndexOf('/')+1);
//获得文件输出流
output = new FileOutputStream(filename);
//输出到文件
int tempByte = -1;
while((tempByte=input.read())>0){
output.write(tempByte);
}
}
202的响应状态码表示请求已经接受,服务器再做进一步处理。
转自:http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
还有一篇比较好的介绍:http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
处理HTTP状态码的更多相关文章
- Http状态码之:301、302重定向
概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一.如果可能,拥有链接编辑功能的客户端应当自动把请求的地 ...
- HTTP常用状态码分析
不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...
- Java发送Http请求并获取状态码
通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...
- HTTP各状态码解释
状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...
- 关于Http状态码
Http状态码表示Http协议所返回的响应的状态.比如客户端向服务器发送请求,如果成功的获得请求的资源,则返回的状态码为200,表示相应成功.如果请求的资源不存在,则通常返回404错误. Http状态 ...
- 生产环境常见的HTTP状态码列表
生产环境常见的HTTP状态码列表(List of HTTP status codes)为: 200 - OK,服务器成功返回网页 - Standard response for success ...
- 常用的14种HTTP状态码速查手册
分类 1xx \> Information(信息) // 接收的请求正在处理 2xx \> Success(成功) // 请求正常处理完毕 3xx \> Redirection(重定 ...
- HTTP状态码(HTTP Status Code)
一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释: 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 代码 说 ...
- Ajax状态值及状态码
1- AJAX状态值与状态码区别AJAX状态值是指,运行AJAX所经历过的几种状态,无论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤.如:正在发送,正在响应等,由AJAX对象与服务器交互时 ...
- 常用HTTP状态码和CURL 000问题
最近在测试CDN服务质量问题,测试过程中返回了一些不同的状态码,当然有一些常用的,也有一些不常用的.最奇葩的是在使用curl命令的时候出现000状态码,问了很多同事,对这个000的反应跟新事物是的 ...
随机推荐
- 安装Mongodb3.0.6单实例
[root@b28-17-51 ~]#mkdir -p /export/data [root@b28-17-51 ~]#mkdir -p /export/log [root@b28-17-51 exp ...
- 模糊查询&&日期时间操作
一.模糊查询 1.采用“_”.“%”通配符进行查询 select * from Students where stu_name like '张_';--一个‘_’表示一个字符 select * fro ...
- [JAVA][RCP] Eclipse4/RCP/Lifecycle
E4AP provides two levels of lifecycles, for contributions and for the application. Contents [hide] ...
- centos php-fpm nginx配置
移除旧的软件包:yum remove httpd* php* 安装:yum install php php-fpm yum install php-gd php-mysql php-mbstring ...
- iOS 各种系统文件目录 临时,缓存,document,lib,归档,序列化
/** 1:Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 2:tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除 3 ...
- C++11 常用语法
1 新类型 C++ 11新增了long long和unsigned long long,以支持64bit宽度: 新增char16_t和char32_t以支持16位和32位字符表示: 增加了“原始”字符 ...
- [磁盘管理与分区]——关于分区、磁盘分区表、MBR
磁盘连接与设备文件名的关系 1. 如下图所示:
- objective-c自学总结(二)---init/set/get方法
一:类的声明和实现: 声明:(放在“类名+.h”文件中). 类的声明主要有两部分组成:实例变量和方法. 例 #import <Foundation/Foundation.h> @inter ...
- java并发编程:进程和线程
java并发编程涉及到很多内容,当然也包括多线程,再次补充点相关概念 原文地址:http://www.cnblogs.com/dolphin0520/p/3910667.html 一.操作系统中为什么 ...
- Android中的单位及测试相关概念
android中的单位: in 英寸 pt 点距 px 像素 dp(dip) 密度无关的像素单位,自适应device屏幕的比例,通常涉及长宽高时采用 sp 与范围无关的像素单位,通常在设置字体大小时 ...