处理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的反应跟新事物是的 ...
随机推荐
- 2天驾驭DIV+CSS (基础篇)(转)
这是去年看到的一片文章,感觉在我的学习中,有不少的影响.于是把它分享给想很快了解css的兄弟们. 基础篇[知识一] “DIV+CSS” 的叫法是不准确的[知识二] “DIV+CSS” 将你引入两大误区 ...
- jdk 1.6 & 1.7新特性
jdk1.6新特性 1.Desktop类和SystemTray类 2.使用JAXB2来实现对象与XML之间的映射 3.StAX 4.使用Compiler API 5.轻量级Http Server AP ...
- python: 命令选项及归类
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... Options and arguments (and corresp ...
- iOS学习之Object-C语言字符串和数值
一.使用苹果帮助文档 1.帮助文档的作用:帮助开发者快速了解系统类的功能. 1)苹果每次iOS版本的升级,都会添加或者更新大量的API,并提供相应的参考文档. ...
- 在HTML中添加目录
<a href="#num1">跳转到第一章</a><div id="num1">第一章</div>用a的hre ...
- ubuntu 修改主机名
sudo gedit /etc/hostname sudo gedit /etc/hosts
- OpenCV检测人脸实例代码
下面是使用OpenCV通过在硬盘中读入图像来对其进行Haar人脸检测的代码. //包含头文件 #include <opencv2/core/core.hpp> #include " ...
- JavaScript显示输出
记得c语言里的printf和java里的println吗,那么在JavaScript中怎么实现同样的功能呢 window.onload = function() { var para = docume ...
- Ant学习---第三节:使用Ant实现一个最小的项目编译
1.编译 .java 文件,生成 .jar 包,代码如下: <?xml version="1.0" encoding="UTF-8"?> <p ...
- Android -- 创建桌面快捷方式
代码 /** * * 返回添加到桌 ...