Java发送Http请求的一般步骤
程序员文章站
2024-03-04 09:58:23
...
Java发送Http请求的一般步骤
最近在使用百度地图和百度AI的开发API,经常需要发送http请求,在这里记录一下java发送Http请求的步骤。希望对大家有用。
了解Http报文结构
首先介绍Http协议的结构。请求报文和响应报文都是由以下部分组成:
- 起始行 (URL)
- 头部(Header)
- 主体 (Body)
根据需要在不同的地方添加数据。我通过百度文字识别的栗子来说明:(选取的例子是三个部分都要参数的例子,可以比较完整的展示http请求的结构)
请求代码
接下来看如何书写请求代码。(直接上代码)
URL url = new URL(address);
//打开连接(起始行)
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置请求方法 POST/GET等
conn.setRequestMethod("POST");
//设置通用的请求属性(头部)
conn.setRequestProperty("Content-Type", contentType);
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setDoInput(true);
//输出流对象(主体部分)
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
os.flush();
os.close();
//建立实际的连接
conn.connect();
//获取所有的响应头
Map<String, List<String>> headers = conn.getHeaderFields();
//获取响应内容
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null){
sb.append(line);
}
br.close();
这是通用代码,注释已经写得比较明了。要说明的是:URL的参数是跟在URL地址的后面,就上面图片的例子,写一个完整的例子,如下:
public static String getResult(){
String address = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"+
"?access_token=你的access_token";
URL url = new URL(address);
//打开连接
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置请求方法
conn.setRequestMethod("POST");
//设置通用的请求属性
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setDoInput(true);
//输出流对象
OutputStream os = conn.getOutputStream();
String param = "image=" + imgData; //imgData需要按照要求的数据类型
os.write(param.getBytes("UTF-8")); //采用utf-8编码方式
os.flush();
os.close();
//建立实际的连接
conn.connect();
//获取响应内容
BufferedReader br = new BufferedReader(new InputStreamReader
(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null){
sb.append(line);
}
br.close();
return sb.toString();
}
这就是Http请求的模板了,老师再不用担心我不会写http的请求了。(另外关于百度部分api的使用会在另外的文章)
个人博客