• 处理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

  • 相关阅读:
    第二周学习总结
    调查问卷
    第五周学习总结
    基于DevExpress的项目窗体统一换肤
    一个Linq to Sql 的关联小问题,搞死人
    VC中类型转换(转载)
    保证一个程序只运行一次
    给所有的Control添加发送键盘事件Tab事件,实现回车键自动跳转到下一个控件[基于Shark Xu]
    遍历进程
    CSS Friendly ASP.NET 2.0 Control Adapters (Beta 2.0)在处理URL时的一个Bug
  • 原文地址:https://www.cnblogs.com/blogsme/p/3228404.html
Copyright © 2020-2023  润新知