如何使用GET方法取得网页内容及POST请求的RFC2616解释

创建一个 GetMethod 的实例,这是一种连接方法的创建。在创建 GetMethod 实例时,将待连接的地址传入到它的构造函数中。

如何使用GET方法取得网页内容及POST请求的RFC2616解释

调用第一步创建好的实例的 execute 方法,以执行第二步创建好的 method 实例。

4. 读 response

5. 释放连接。无论执行方法是否成功,都必须释放连接

6. 对得到后的内容进行处理

以下是用 GET 方法来取得某网页内容的代码编写步骤:首先明确要使用 GET 方法;接着确定获取网页内容的目标;然后按照相关编程语法和规范来编写具体的代码语句以实现用 GET 方法取得该网页内容。

以下是程序的完整代码,并且可在附件中的 test.GetSample 里找到。

package test;  
import java.io.IOException;  
导入 org.apache.commons.httpclient 相关的类。 它包含了用于进行 HTTP 客户端操作的各种功能和类。 例如 HttpMethodBase 等类用于定义 HTTP 请求的方法和参数。 还有 HttpClient 类用于创建 HTTP 客户端实例并发送请求。 以及 HttpConnectionManager 类用于管理 HTTP 连接等。 这些类共同协作来实现 HTTP 客户端的功能。
使用 org.apache.commons.httpclient.methods 中的 GetMethod 类。
引入 org.apache.commons.httpclient.params.HttpMethodParams 类。
public class GetSample{  
参数为 String 类型的数组 args。
  //构造HttpClient的实例  
创建了一个 HttpClient 实例,名为 httpClient 。
  //创建GET方法的实例  
创建了一个名为 getMethod 的 GetMethod 对象,其参数为 "http://www.ibm.com"。
  //使用系统提供的默认的恢复策略  
getMethod 获取其参数,然后设置参数为 HttpMethodParams.RETRY_HANDLER 。
创建了一个新的 DefaultHttpMethodRetryHandler 对象。
  try {  
   //执行getMethod  
使用 httpClient 执行 getMethod 方法,得到的状态码赋值给 statusCode 。
如果状态码不等于 HttpStatus.SC_OK ,那么
System.err 打印出:“方法失败:”
      + getMethod.getStatusLine());  
   }  
   //读取内容   
获取到的方法获取到了响应体,这个响应体是一个字节数组,即 byte[] responseBody = getMethod.getResponseBody();
   //处理内容  
输出新的字符串(responseBody)。
  } catch (HttpException e) {  
   //发生致命的异常,可能是协议不对或者返回的内容有问题  
请检查你提供的 http 地址!
   e.printStackTrace();  
  } catch (IOException e) {  
   //发生网络异常  
   e.printStackTrace();  
  } finally {  
   //释放连接  
调用 getMethod 并释放连接。
  }  
 }  
}  

下面这个是本人实用的demo

package com.bw.util;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
引入了 org.apache.http.client.methods 包中的 CloseableHttpResponse 类。
使用了“import”关键字来导入特定的类,其中“org.apache.http.client.methods.HttpGet”是被导入的类。它用于执行 HTTP GET 请求相关的操作。
引入了 org.apache.http.client.utils 包中的 URIBuilder 类。
引入 org.apache.http.impl.client.CloseableHttpClient;
导入 org.apache.http.impl.client.HttpClientBuilder 这个类。
导入 org.apache.http.impl.client.HttpClients 这个类。
从“org.apache.http.util”这个包中导入“EntityUtils”。
/**
HttpClient 通过使用 Java 代码来模拟浏览器的行为,从而发出 HTTP 请求,并获取相应的响应结果。
 *
 */
public class HttpClientUtil {
	
	
公共静态的 void 方法 main,其参数为 String 类型的数组 args。
String 这个变量名为 url ,它的值是 "http://127.0.0.1:9090/taotao_rest/rest/item/536563" 。
使用 doGet 方法获取数据,传入的参数为 url 和 null,获取到的结果赋值给 result 变量。
		System.out.println(result);
	}
	//
该方法用于通过指定的 URL 获取数据,并可以携带参数(如果有)。它会发起一个 HTTP GET 请求,并返回服务器响应的内容。在实际使用中,需要根据具体的业务需求和环境来处理返回的结果。例如,可以将返回的内容解析为特定的数据格式,或者进行进一步的业务逻辑处理。 paramMap) {
		
CloseableHttpResponse 的 response 为 null 。
CloseableHttpClient 这个对象 httpClient 是 null 。
		String result = null;
		try {
			//1.创建httpClient对象
HttpClient 被创建为默认的实例。
			
			
			//2.创建uri
创建了一个 URIBuilder 对象 uriBuilder,该对象用于构建指定的 URL 地址 url。
如果 paramMap 不为空并且不是空的。
对于 paramMap 的键集里的每一个字符串 key 而言:
uriBuilder 会添加一个参数,参数名为 key,参数值为 paramMap 中对应的 key 的值。
				}
			}
			
			URI uri = uriBuilder.build();
			
			//3.创建HttpGet
创建了一个 HttpGet 对象 httpGet,该对象的参数是 uri
			
			//4.发送http请求
使用 httpClient 执行了 httpGet ,并得到了 response 。
		
			//5.获取响应结果
如果 response 不为空且 response 的状态行的状态码为 200 ,那么 ;如果 response 为空或者 response 的状态行的状态码不为 200 ,那么 。
获取到的响应的实体通过 EntityUtils 转换为字符串,使用的字符编码是 utf-8,转换后的结果赋值给 result 变量。
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				//6.关闭资源
				if(response != null) {
					response.close();
				}
				httpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}
	
}

post 请求

根据 RFC2616,以下是对 POST 的解释:POST 方法的作用是向目的服务器发起请求,要求服务器接受附在请求后的实体,并将其视为请求队列(Request-Line)中请求 URI 所指定资源的附加新子项。POST 被设计成以统一的方法来实现以下功能:

HttpClient 中的 PostMethod 和 GetMethod 类似,不同之处在于设置 PostMethod 的实例与 GetMethod 不同,其余步骤大致相同。在下面的例子中,省略了与 GetMethod 相同的步骤,仅说明与上述不同的地方,且以登录清华大学 BBS 为例进行说明。

字符串 url 为 "http://www.newsmth.net/bbslogin2.php";该 url 具体指向 "http://www.newsmth.net/bbslogin2.php" 这个地址;"http://www.newsmth.net/bbslogin2.php" 被赋予给了字符串 url 。
创建了一个 PostMethod 对象 postMethod,该对象用于向指定的 url 发送 POST 请求。
// 填入各个表单域的值  
NameValuePair 数组 data 包含一个元素,该元素为一个新的 NameValuePair 对象,其“id”字段值为“youUserName”。
创建一个新的 NameValuePair 对象,其键为 "passwd",值为 "yourPwd" 。
// 将表单的值放入postMethod中  
postMethod 将数据设置为请求体。
// 执行postMethod  
执行 `httpClient.executeMethod(postMethod)` 后,得到一个整型的状态码 `statusCode` 。
HttpClient 对于像 POST 和 PUT 这样要求接受后继服务的请求,不能自动进行转发处理。
// 301或者302  
如果状态码等于 HttpStatus.SC_MOVED_PERMANENTLY 或者
如果 statusCode 等于 HttpStatus.SC_MOVED_TEMPORARILY ,那么
    // 从头中取出转向的地址  
获取的 postMethod 的响应头中的 "location" 对应的头部位置信息为 Header locationHeader 。
    String location = null;  
    if (locationHeader != null) {  
location 等于 locationHeader 获取到的值。
    } else {  
System.err 输出:位置字段值为 null 。
    }  
    return;  

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读