如图所示,我们经常会遇到传递参数的时候将参数放在header里进行传输,但是接口文档参数是在header的参数,并不是在json体里面的(当然json体里面也会带其他参数)
比如我们已post请求为例子
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public static String customerClient(String userAccount, String password, String authToken) throws Exception {
HttpPost httpPost = new HttpPost("http://118.122.126.10:11134/customer-client/custom/load");
CloseableHttpClient client = HttpClients.createDefault();
String respContent = null;
// json方式
JSONObject jsonParam = new JSONObject();
jsonParam.put("userAccount", userAccount);
jsonParam.put("password", password);
jsonParam.put("sign", GetSignUtil.getSign(new String[]{userAccount, password}));
StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");//解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpPost.addHeader("userAccount", userAccount);
httpPost.addHeader("authToken", authToken);
httpPost.setEntity(entity);
HttpResponse resp = client.execute(httpPost);//执行时机
if (resp.getStatusLine().getStatusCode() == 200) {
HttpEntity he = resp.getEntity();
respContent = EntityUtils.toString(he, "UTF-8");
}
JSONObject jsonObject = JSONObject.parseObject(respContent);
return respContent;
}
其中最主要的代码
httpPost.addHeader("userAccount", userAccount);
httpPost.addHeader("authToken", authToken);
这样就可以实现带参数或者token,如果想token在postman里面是全局变量也是可以的,请参考其他博客,我只是顺便插一嘴
注意以下方式可能不成功
HttpURLConnection.setDefaultRequestProperty("userAccount", userAccount);//过时
HttpURLConnection.setDefaultRequestProperty("authToken", authToken);//过时