JAva爬虫之处理HTTP状态码 偏执的太偏执、 2022-07-17 00:40 136阅读 0赞 上一次写了一个很简单的爬虫,这一次将在上一次的基础上进行优化,上次访问Web资源的时候,设计到了HTTP状态码,只处理了为200的请求,接下来了解下HTTP状态码 # HTTP状态码: # HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事。 状态码位于HTTP Response 的第一行中,会返回一个”三位数字的状态码“和一个“状态消息”。 ”三位数字的状态码“便于程序进行处理, “状态消息”更便于人理解。 我们可以利用谷歌浏览器查看HTTP的请求头,里面就包含了状态码。 ![Center][] # # # 状态码分类 # HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码。随着协议的发展,HTTP规范中会定义更多的状态码。 小技巧: 假如你看到一个状态码518, 你并不知道具体518是什么意思。 这时候你只要知道518是属于(5XX,服务器错误就可以了) <table style="margin: 0px auto; padding: 0px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse; font-size: 12px; color: rgb(35, 35, 35); font-family: verdana, Arial, Helvetica, sans-serif; line-height: 28px; widows: 1; width: 650px; height: 127px; background-color: rgb(250, 255, 255);"> <thead style="margin: 0px; padding: 0px;"> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;"> </td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">已定义范围</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">分类</td> </tr> </thead> <tbody style="margin: 0px; padding: 0px;"> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">1XX</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">100-101</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">信息提示</td> </tr> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">2XX</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">200-206</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">成功</td> </tr> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">3XX</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">300-305</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">重定向</td> </tr> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">4XX</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">400-415</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">客户端错误</td> </tr> <tr style="margin: 0px; padding: 0px;"> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">5XX</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">500-505</td> <td style="margin: 0px; padding: 5px; line-height: 21.6px; border: 1px solid rgb(192, 192, 192); border-collapse: collapse;">服务器错误</td> </tr> </tbody> </table> 当返回值为5XX的表示服务器错误,我们不需要去处理。 当返回值状态码为3XX时,表示进行重定向,那么接下来可以把上次的代码进行改写以下了。 public class UrlReptile { private static HttpClient httpClient = new HttpClient(); // 创建一个代理服务器 /*static { // 设置代理服务器的IP和端口 httpClient.getHostConfiguration().setProxy("172.16.1.32",8080); }*/ public static boolean downLoadPage(String path) throws IOException { // 创建输入输出流 InputStream inputStream = null; OutputStream outputStream = null; /*// 得到post方法 PostMethod postMethod = new PostMethod(path);*/ //得到get方法 GetMethod getMethod=new GetMethod(path); // 设置post方法的参数 /* NameValuePair[] postData = new NameValuePair[2]; postData[0] = new NameValuePair("name", "baidu"); postData[1] = new NameValuePair("password", "******"); postMethod.addParameters(postData);*/ try { // 执行返回状态码 int statusCode = httpClient.executeMethod(getMethod); //处理状态为3XX的 if(statusCode==HttpStatus.SC_MOVED_TEMPORARILY|| statusCode==HttpStatus.SC_SEE_OTHER|| statusCode==HttpStatus.SC_TEMPORARY_REDIRECT){ //读取新的URL地址 Header header=getMethod.getRequestHeader("location"); if(header!=null){ String newUrl=header.getValue(); if(newUrl==null||newUrl.equals("")){ newUrl="/"; //重定向处理 GetMethod method=new GetMethod(newUrl); } } } // 处理状态吗 if (statusCode == HttpStatus.SC_OK) { // 200表示成功 // 得到输入流 inputStream = getMethod.getResponseBodyAsStream(); // 得到文件名 String fileName = path.substring(path.lastIndexOf('/')+1)+ ".html"; // 得到输出流 outputStream = new FileOutputStream(fileName); // 输出到文件 int tByte = -1; while ((tByte = inputStream.read()) > 0) { outputStream.write(tByte); } } return true; } catch (Exception e) { e.printStackTrace(); } finally { // 关闭流 inputStream.close(); outputStream.close(); } return false; } public static void main(String[] args) { // 抓取CSDN首页,输出 try { UrlReptile.downLoadPage("http://www.csdn.net/"); } catch (Exception e) { } } } [Center]: /images/20220717/1982665ff83b4507a649227b6a210714.png
相关 Java Web开发:常见HTTP状态码处理错误 在Java Web开发中,处理HTTP状态码是常见的异常处理方式。以下是一些常见HTTP状态码的解释和处理示例: 1. **200** - OK - 如果请求成功,返回 亦凉/ 2024年09月11日 04:57/ 0 赞/ 67 阅读
相关 【网络编程】之 HTTP 状态码 常用状态码 20(OK):表示服务器已经成功接受请求,并将返回客户端所请求的最终结果 301(Moved Permanently):永久移动。请求的资源已被永 冷不防/ 2022年11月26日 07:50/ 0 赞/ 139 阅读
相关 HTTP 之 状态码 HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、 布满荆棘的人生/ 2022年09月03日 02:27/ 0 赞/ 164 阅读
相关 HTTP协议之状态码详解 http://kb.cnblogs.com/page/168720/ HTTP状态码,我都是现查现用。 我以前记得几个常用的状态码,比如200,302,304,404, 50 ╰半橙微兮°/ 2022年07月17日 00:58/ 0 赞/ 306 阅读
相关 JAva爬虫之处理HTTP状态码 上一次写了一个很简单的爬虫,这一次将在上一次的基础上进行优化,上次访问Web资源的时候,设计到了HTTP状态码,只处理了为200的请求,接下来了解下HTTP状态码 HTTP 偏执的太偏执、/ 2022年07月17日 00:40/ 0 赞/ 137 阅读
相关 Http状态码 200 用来表示请求成功. 206 部分内容 300 来表示重定向. 302\307 临时移动 客官°小女子只卖身不卖艺/ 2022年04月17日 03:53/ 0 赞/ 232 阅读
相关 PHP试题之---http状态码 常见的一些状态码如下: 200 – 服务器成功返回网页 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会 深碍√TFBOYSˉ_/ 2022年03月16日 14:49/ 0 赞/ 154 阅读
相关 HTTP之HTTP状态码 HTTP之HTTP状态码 1. 状态码 1. 作用 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结 果。借助状态码,用户可以知道服务器端是正常 叁歲伎倆/ 2022年03月10日 06:44/ 0 赞/ 219 阅读
相关 HTTP状态码 转[菜鸟教程:HTTP状态码][HTTP] 转[百度百科][Link 1] 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前, 末蓝、/ 2022年02月14日 12:50/ 0 赞/ 319 阅读
还没有评论,来说两句吧...