如何为URLConnection类型的对象添加请求参数
问题原因
addRequestProperty()和setRequestProperty()是用于设置HTTP请求头的方法,你在Postman「Params」板块添加的参数属于URL查询参数,会自动拼接在请求URL末尾,和请求头是完全不同的传输位置,所以之前的写法不会生效。
正确实现方式
GET请求场景
直接把参数拼接在请求URL末尾即可,包含特殊字符的参数值需要先做URL编码:
import java.net.URLEncoder; import java.nio.charset.StandardCharsets; // 原始请求地址 String baseUrl = "https://你的接口地址"; // 拼接查询参数 String urlWithParams = baseUrl + "?access_key=" + URLEncoder.encode("dsd97sd863hb8323hjhd933ok4", StandardCharsets.UTF_8.name()); // 初始化连接 URL url = new URL(urlWithParams); URLConnection connection = url.openConnection(); // 后续正常设置超时、请求方法等参数即可
POST表单请求场景
如果是POST请求、参数需要放在请求体的表单格式中,需要向连接输出流写入参数:
import java.net.URLEncoder; import java.io.OutputStream; import java.nio.charset.StandardCharsets; URL url = new URL("https://你的接口地址"); URLConnection connection = url.openConnection(); // 开启输出权限 connection.setDoOutput(true); // 设置请求体类型为表单格式 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); // 构造参数 String params = "access_key=" + URLEncoder.encode("dsd97sd863hb8323hjhd933ok4", StandardCharsets.UTF_8.name()); // 写入请求体 try(OutputStream os = connection.getOutputStream()) { byte[] paramBytes = params.getBytes(StandardCharsets.UTF_8); os.write(paramBytes, 0, paramBytes.length); } // 后续正常读取响应即可
补充说明
如果接口明确要求access_key放在请求头中,需要先和接口提供方确认请求头的正确命名,比如部分接口使用X-Access-Key作为头字段名,拼写错误也会导致参数不生效。
内容的提问来源于stack exchange,提问作者johnnycode
相关产品推荐
相关产品推荐

