/**

  • post请求

  • @param url

  • @param json

  • @return

*/

public static String doPost(String url, JSONObject json){

HttpClient httpClient = new HttpClient();

PostMethod postMethod = new PostMethod(url);

postMethod.addRequestHeader(“accept”, “/”);

postMethod.addRequestHeader(“connection”, “Keep-Alive”);

//设置json格式传送

postMethod.addRequestHeader(“Content-Type”, “application/json;charset=GBK”);

//必须设置下面这个Header

postMethod.addRequestHeader(“User-Agent”, “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36”);

//添加请求参数

postMethod.addParameter(“commentId”, json.getString(“commentId”));

String res = “”;

try {

int code = httpClient.executeMethod(postMethod);

if (code == 200){

res = postMethod.getResponseBodyAsString();

System.out.println(res);

}

} catch (IOException e) {

e.printStackTrace();

}

return res;

}

public static void main(String[] args) {

System.out.println(doGet(“http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071”, “GBK”));

System.out.println(“-----------分割线------------”);

System.out.println(“-----------分割线------------”);

System.out.println(“-----------分割线------------”);

JSONObject jsonObject = new JSONObject();

jsonObject.put(“commentId”, “13026194071”);

System.out.println(doPost(“http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071”, jsonObject));

}

}

3、建议

代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,不建议直接使用。

二、okhttp


1、简介

OkHttp是一个高效的HTTP客户端,允许所有同一个主机地址的请求共享同一个socket连接;连接池减少请求延时;透明的GZIP压缩减少响应数据的大小;缓存响应内容,避免一些完全重复的请求

当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IPOkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接,当握手失败时会回退到TLS 1.0

2、pom依赖

com.squareup.okhttp3

okhttp

3.10.0

它的请求/响应 API 使用构造器模式builders来设计,它支持阻塞式的同步请求和带回调的异步请求。

3、配置文件

@Configuration

public class OkHttpConfig {

@Bean

public OkHttpClient okHttpClient() {

return new OkHttpClient.Builder()

//.sslSocketFactory(sslSocketFactory(), x509TrustManager())

.retryOnConnectionFailure(false)

.connectionPool(pool())

.connectTimeout(30, TimeUnit.SECONDS)

.readTimeout(30, TimeUnit.SECONDS)

.writeTimeout(30,TimeUnit.SECONDS)

.build();

}

@Bean

public X509TrustManager x509TrustManager() {

return new X509TrustManager() {

@Override

public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

}

@Override

public X509Certificate[] getAcceptedIssuers() {

return new X509Certificate[0];

}

};

}

@Bean

public SSLSocketFactory sslSocketFactory() {

try {

//信任任何链接

SSLContext sslContext = SSLContext.getInstance(“TLS”);

sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());

return sslContext.getSocketFactory();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (KeyManagementException e) {

e.printStackTrace();

}

return null;

}

/**

  • Create a new connection pool with tuning parameters appropriate for a single-user application.

  • The tuning parameters in this pool are subject to change in future OkHttp releases. Currently

*/

@Bean

public ConnectionPool pool() {

return new ConnectionPool(200, 5, TimeUnit.MINUTES);

}

}

4、客户端工具

@Slf4j

public class OkHttpClient {

private static final MediaType JSON = MediaType.parse(“application/json; charset=utf-8”);

private volatile static okhttp3.OkHttpClient client;

private static final int MAX_IDLE_CONNECTION = Integer

.parseInt(ConfigManager.get(“httpclient.max_idle_connection”));

private static final long KEEP_ALIVE_DURATION = Long

.parseLong(ConfigManager.get(“httpclient.keep_alive_duration”));

private static final long CONNECT_TIMEOUT = Long.parseLong(ConfigManager.get(“httpclient.connectTimeout”));

private static final long READ_TIMEOUT = Long.parseLong(ConfigManager.get("httpclient. "));

/**

  • 单例模式(双重检查模式) 获取类实例

  • @return client

*/

private static okhttp3.OkHttpClient getInstance() {

if (client == null) {

synchronized (okhttp3.OkHttpClient.class) {

if (client == null) {

client = new okhttp3.OkHttpClient.Builder()

.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)

.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)

.connectionPool(new ConnectionPool(MAX_IDLE_CONNECTION, KEEP_ALIVE_DURATION,

TimeUnit.MINUTES))

.build();

}

}

}

return client;

}

public static String syncPost(String url, String json) throws IOException {

RequestBody body = RequestBody.create(JSON, json);

Request request = new Request.Builder()

.url(url)

.post(body)

.build();

try {

Response response = OkHttpClient.getInstance().newCall(request).execute();

if (response.isSuccessful()) {

String result = response.body().string();

log.info(“syncPost response = {}, responseBody= {}”, response, result);

return result;

}

String result = response.body().string();

log.info(“syncPost response = {}, responseBody= {}”, response, result);

throw new IOException(“三方接口返回http状态码为” + response.code());

} catch (Exception e) {

log.error(“syncPost() url:{} have a ecxeption {}”, url, e);

throw new RuntimeException(“syncPost() have a ecxeption {}” + e.getMessage());

}

}

public static String syncGet(String url, Map<String, Object> headParamsMap) throws IOException {

Request request;

final Request.Builder builder = new Request.Builder().url(url);

try {

if (!CollectionUtils.isEmpty(headParamsMap)) {

final Iterator<Map.Entry<String, Object>> iterator = headParamsMap.entrySet()

.iterator();

while (iterator.hasNext()) {

final Map.Entry<String, Object> entry = iterator.next();

builder.addHeader(entry.getKey(), (String) entry.getValue());

}

}

request = builder.build();

Response response = OkHttpClient.getInstance().newCall(request).execute();

String result = response.body().string();

log.info(“syncGet response = {},responseBody= {}”, response, result);

if (!response.isSuccessful()) {

throw new IOException(“三方接口返回http状态码为” + response.code());

}

return result;

} catch (Exception e) {

log.error(“remote interface url:{} have a ecxeption {}”, url, e);

throw new RuntimeException(“三方接口返回异常”);

}

}

}

三、RestTemplate


1、pom依赖

org.springframework.boot

spring-boot-starter-web

2、get请求(不带参的即把参数取消即可)

// 1-getForObject()

User user1 = this.restTemplate.getForObject(uri, User.class);

// 2-getForEntity()

ResponseEntity responseEntity1 = this.restTemplate.getForEntity(uri, User.class);

HttpStatus statusCode = responseEntity1.getStatusCode();

HttpHeaders header = responseEntity1.getHeaders();

User user2 = responseEntity1.getBody();

// 3-exchange()

RequestEntity requestEntity = RequestEntity.get(new URI(uri)).build();

ResponseEntity responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);

User user3 = responseEntity2.getBody();

方式一:

Notice notice = restTemplate.getForObject(“http://fantj.top/notice/list/{1}/{2}”

, Notice.class,1,5);

方式二:

Map<String,String> map = new HashMap();

map.put(“start”,“1”);

map.put(“page”,“5”);

Notice notice = restTemplate.getForObject(“http://fantj.top/notice/list/”

, Notice.class,map);

3、post请求

// 1-postForObject()

User user1 = this.restTemplate.postForObject(uri, user, User.class);

// 2-postForEntity()

ResponseEntity responseEntity1 = this.restTemplate.postForEntity(uri, user, User.class);

// 3-exchange()

RequestEntity requestEntity = RequestEntity.post(new URI(uri)).body(user);

ResponseEntity responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);

方式一:

String url = “http://demo/api/book/”;

HttpHeaders headers = new HttpHeaders();

MediaType type = MediaType.parseMediaType(“application/json; charset=UTF-8”);

headers.setContentType(type);

String requestJson = “{…}”;

HttpEntity entity = new HttpEntity(requestJson,headers);

String result = restTemplate.postForObject(url, entity, String.class);

System.out.println(result);

方式二:

@Test

public void rtPostObject(){

RestTemplate restTemplate = new RestTemplate();

String url = “http://47.xxx.xxx.96/register/checkEmail”;

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> map= new LinkedMultiValueMap<>();

map.add(“email”, “844072586@qq.com”);

HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);

ResponseEntity response = restTemplate.postForEntity( url, request , String.class );
System.out.println(response.getBody());
}

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐