HTTP请求操作全解析:从基础到高级应用
立即解锁
发布时间: 2025-08-18 01:08:32 阅读量: 1 订阅数: 3 

# HTTP 请求操作全解析:从基础到高级应用
## 1. 发起 HTTP POST 请求
### 1.1 基本 POST 请求
在发起 HTTP POST 请求时,不能像 GET 请求那样使用 URL 类的 `getText()` 快捷方法。需要获取 `URLConnection` 并将请求方法设置为 POST(GET 是默认方法)。以下是一个基本的 POST 请求示例:
```groovy
def url = new URL("http://search.yahoo.com/search")
def connection = url.openConnection()
// 切换方法为 POST
connection.setRequestMethod("POST")
// 写入数据
def queryString = "n=20&vf=pdf&p=groovy+grails"
connection.doOutput = true
Writer writer = new OutputStreamWriter(connection.outputStream)
writer.write(queryString)
writer.flush()
writer.close()
connection.connect()
// 打印结果
println connection.content.text
```
操作步骤如下:
1. 创建 `URL` 对象。
2. 打开连接获取 `URLConnection`。
3. 设置请求方法为 POST。
4. 准备查询字符串。
5. 将 `doOutput` 设置为 `true` 以允许输出数据。
6. 获取输出流并写入查询字符串。
7. 刷新并关闭写入器。
8. 建立连接。
9. 获取并打印响应内容。
### 1.2 从列表构建查询字符串
可以从列表构建查询字符串,确保值经过 URL 编码,然后用 `&` 连接元素。示例代码如下:
```groovy
def queryString = []
queryString << "n=" + URLEncoder.encode("20")
queryString << "vf=" + URLEncoder.encode("pdf")
queryString << "p=" + URLEncoder.encode("groovy grails")
def url = new URL("http://search.yahoo.com/search")
def connection = url.openConnection()
connection.setRequestMethod("POST")
connection.doOutput = true
Writer writer = new OutputStreamWriter(connection.outputStream)
writer.write(queryString.join("&"))
writer.flush()
writer.close()
connection.connect()
def results = connection.content.text
```
操作步骤如下:
1. 创建一个空列表用于存储查询字符串元素。
2. 向列表中添加编码后的查询字符串元素。
3. 创建 `URL` 对象并打开连接。
4. 设置请求方法为 POST。
5. 将 `doOutput` 设置为 `true`。
6. 获取输出流并写入连接后的查询字符串。
7. 刷新并关闭写入器。
8. 建立连接。
9. 获取响应内容。
### 1.3 创建便利的 Post 类
将复杂的连接逻辑封装到 `Post` 类中,结合 `QueryString` 类可以提供更好的开发体验。示例代码如下:
```groovy
class Post{
String url
QueryString queryString = new QueryString()
URLConnection connection
String text
String getText(){
def thisUrl = new URL(url)
connection = thisUrl.openConnection()
connection.setRequestMethod("POST")
connection.doOutput = true
Writer writer = new OutputStreamWriter(connection.outputStream)
writer.write(queryString.toString())
writer.flush()
writer.close()
connection.connect()
return connection.content.text
}
String toString(){
return "POST:\n" +
url + "\n" +
queryString.toString()
}
}
def post = new Post(url:"http://search.yahoo.com/search")
post.queryString.add("n", 20)
post.queryString.add("vf", "pdf")
post.queryString.add("p", "groovy grails")
println post
println post.text
```
操作步骤如下:
1. 定义 `Post` 类,包含 URL、查询字符串、连接和响应文本等属性。
2. 实现 `getText()` 方法,用于发起 POST 请求并返回响应文本。
3. 实现 `toString()` 方法,用于打印请求信息。
4. 创建 `Post` 对象并设置 URL。
5. 向查询字符串中添加参数。
6. 打印请求信息。
7. 打印响应文本。
### 1.4 模拟 HTML 表单提交进行测试
有了 `Post` 类后,可以轻松模拟 HTML 表单提交。以下是一个示例:
```groovy
def post = new Post(url:"http://localhost:8888/jaw/controller")
post.queryString.add("action", "saveCar")
post.queryString.add("make", "Toyota")
post.queryString.add("model", "Prius")
post.queryString.add("modelYear", 2012)
println post.text
```
操作步骤如下:
1. 创建 `Post` 对象并设置 URL。
2. 向查询字符串中添加表单字段和值。
3. 打印响应文本。
### 1.5 RESTful POST 请求使用 XML
在 RESTful 服务中,POST 请求通常期望在请求体中包含 XML 数据。需要将 `Content-Type` 从默认的 `application/x-www-form-urlencoded` 更改为 `application/xml`,并且不进行 URL 编码。示例代码如下:
```groovy
def xml = """<car>
<make>Toyota</make>
<model-year>2012</model-year>
<model>Prius</model>
</car>"""
def url = new URL("http://localhost:8888/jaw/car")
def connection = url.openConnection()
// 设置元数据
connection.setRequestMethod("POST")
connection.setRequestProperty("Content-Type","application/xml")
// 写入数据
connection.doOutput = true
Writer writer = new OutputStreamWriter(connection.outputStream)
writer.write(xml)
writer.flush()
writer.close()
connection.connect()
def results = connection.content.text
```
操作步骤如下:
1. 准备 XML 数据。
2. 创建 `URL` 对象并打开连接。
3. 设置请求方法为 POST。
4. 设置 `Content-Type` 为 `application/xml`。
5. 将 `doOutput` 设置为 `true`。
6. 获取输出流并写入 XML 数据。
7. 刷新并关闭写入器。
8. 建立连接。
9. 获取并打印响应内容。
## 2. 发起 HTTP PUT 请求
### 2.1 基本 PUT 请求
HTTP PUT 请求在语法上与 POST 请求相同,唯一的区别是将请求方法设置为 PUT。PUT 在语义上相当于数据库的 UPDATE 操作。示例代码如下:
```groovy
def xml = """<car id="142">
<make>Toyota</make>
<model-year>2012</model-year>
<model>Prius, Luxury Edition</model>
</car>"""
def url = new URL("http://localhost:8888/jaw/car/142")
def connection = url.openConnection()
connection.setRequestMethod("PUT")
connection.setRequestProperty("Content-Type","application/xml")
connection.doOutput = true
Writer writer = new OutputStreamWriter(connection.outputStream)
writer.write(xml)
writer.flush()
writer.close()
connection.conn
```
0
0
复制全文
相关推荐









