HttpClient接口調用

HttpClient接口調用

pom.xml文件配置

		<dependency>
		    <groupId>commons-httpclient</groupId>
		    <artifactId>commons-httpclient</artifactId>
		    <version>3.1</version>
		</dependency>

額外知識點

想直奔主題的童鞋,可跳過該步驟

將接口常量配置到配置文件中(筆者使用的Spring Boot)

修改.yml文件

wbFrame:
  # 行情對接配置信息
  quote:
    quoteUrl: http://192.168.100.24:8080/api/service/depthMarketData
    tokenUrl: http://192.168.100.24:8080/api/getAccessToken
    loginUrl: http://192.168.102.150:8080/api/service/futuresAccountLogin

獲取配置文件中的信息

package net.qmgf.proj.wbmining.common.config;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 獲取配置文件中信息config
 */
@ConfigurationProperties(prefix = "wbFrame")
@Component
@Data
@NoArgsConstructor
public class WBFrameProperties {

	/**
	 * 行情對接配置
	 */
	private Quote quote;

	/**
	 * 行情對接配置信息
	 *
	 * @author He
	 */
	@Data
	@NoArgsConstructor
	public static class Quote {
		/**
		 * 獲取內外盤行情url
		 */
		private String quoteUrl;
		/**
		 * 獲取token的url
		 */
		private String tokenUrl;
		 /**
         * 獲取賬號登錄的url
         */
        private String loginUrl;
	}

}

DTO & JSON 互相轉換

import com.alibaba.fastjson.JSON;

// dto 轉 json
String json = JSON.toJSONString(dto)

// json 轉 dto
DTO dto = JSON.parseObject(str, DTO.class)

接口對接

LoginDataCtpDto

這裏的接口傳入和接收DTO都用這一個了,請允許筆者偷懶(手動滑稽)。

package

net.qmgf.proj.wbmining.fut.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import net.qmgf.frame.common.base.model.BaseEntityDto;

/**
 * 
 * @author He
 * @date 2020年6月9日
 * @version 1.0
 *
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "ctp賬號登錄信息")
public class LoginDataCtpDto extends BaseEntityDto {

	private static final long serialVersionUID = 1L;

	/**
	 * 經紀商ID
	 */
	@ApiModelProperty(value = "經紀商ID")
	private String brokerId;
	/**
	 * 用戶ID
	 */
	@ApiModelProperty(value = "用戶ID")
	private String userId;
	/**
	 * 登錄狀態
	 */
	@ApiModelProperty(value = "登錄狀態")
	private Boolean loginStatus;

}

LoginCtpDto

package

net.qmgf.proj.wbmining.fut.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import net.qmgf.frame.common.base.model.BaseEntityDto;

/**
 * 
 * @author He
 * @date 2020年6月9日
 * @version 1.0
 *
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value = "ctp賬號登錄返回信息")
public class LoginCtpDto extends BaseEntityDto {

	private static final long serialVersionUID = 1L;

	/**
	 * 狀態
	 */
	@ApiModelProperty(value = "狀態")
	private Boolean status;

	/**
	 * data
	 */
	@ApiModelProperty(value = "data")
	private List<LoginDataCtpDto> data;

}

接口實現

package

net.qmgf.proj.wbmining.quote.service.impl;

import java.util.List;

import net.qmgf.frame.common.base.service.impl.BaseServiceImpl;
import net.qmgf.proj.wbmining.base.entity.DdFutureCompany;
import net.qmgf.proj.wbmining.base.service.IDdFutureCompanyService;
import net.qmgf.proj.wbmining.common.config.WBFrameProperties;
import net.qmgf.proj.wbmining.form.service.impl.IndexFormServiceImpl;
import net.qmgf.proj.wbmining.fut.dto.LoginCtpDto;
import net.qmgf.proj.wbmining.fut.dto.LoginDataCtpDto;
import net.qmgf.proj.wbmining.quote.dto.QuoteFuturesAccountDto;
import net.qmgf.proj.wbmining.quote.entity.QuoteFuturesAccount;
import net.qmgf.proj.wbmining.quote.mapper.QuoteFuturesAccountMapper;
import net.qmgf.proj.wbmining.quote.service.IQuoteFuturesAccountService;
import net.qmgf.proj.wbmining.quote.service.IQuotePreAddressService;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.itextpdf.text.log.Logger;
import com.itextpdf.text.log.LoggerFactory;
/**
 * <p>
 * 期貨賬號密碼 服務實現類
 * </p>
 *
 * @author qmgf
 * @since 2020-05-12
 */
@Service
public class QuoteFuturesAccountServiceImpl extends BaseServiceImpl<QuoteFuturesAccountMapper, QuoteFuturesAccount> implements
		IQuoteFuturesAccountService {

	private static final Logger logger = LoggerFactory.getLogger(IndexFormServiceImpl.class);
    private static final int readTimeOut = 30000;
    private static final int conTimeOut = 30000;

    @Autowired
    private IDdFutureCompanyService ddFutureCompanyService;
    @Autowired
    private WBFrameProperties wBFrameProperties;

	
	/**
	 * 登錄
	 * 
	 * @author He
	 * @date 2020年6月9日
	 * @version 1.0
	 *
	 * @param quoteFuturesAccount
	 * @return
	 */
	@Override
	public Boolean signIn(QuoteFuturesAccountDto quoteFuturesAccount) {

		Boolean loginStatus = false;
		
		// 獲取配置文件的信息
		// String token = JwtUtil.getAccessToken("admin", "PC");
		String tokenUrl = wBFrameProperties.getQuote().getTokenUrl();
		// String postUrl = "http://192.168.102.150:8080/api/service/futuresAccountLogin";
		String postUrl = wBFrameProperties.getQuote().getLoginUrl();


		// 數據準備
		DdFutureCompany futureCompany = ddFutureCompanyService.selectById(quoteFuturesAccount.getBrokerId());
		String fcompanyCode = futureCompany.getFcompanyCode();
		LoginDataCtpDto dataDto = new LoginDataCtpDto();
		dataDto.setUserId(quoteFuturesAccount.getUserAccount());
		dataDto.setBrokerId(fcompanyCode);

		// Dto轉Json
		String requestBody = JSON.toJSONString(dataDto);
		try {
			// 接口調用
			String response = httpPost(postUrl, tokenUrl, requestBody);
			
			// Json轉Dto
			LoginCtpDto dto = JSON.parseObject(response, LoginCtpDto.class);
			List<LoginDataCtpDto> data = dto.getData();
			if (data != null && data.size() > 0) {
				loginStatus = data.get(0).getLoginStatus();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return loginStatus;
	}
	
	
	/**
	 * 接口調用HTTP POST
	 *
	 * @param url
	 * @param token
	 * @param requestBody
	 * @return
	 * @throws Exception
	 */
	public String httpPost(String url, String token, String requestBody) throws Exception {
		String response = null;
		PostMethod postMethod = null;
		logger.info("訪問:" + url);
		try {
			HttpClient client = new HttpClient(new HttpClientParams(), new SimpleHttpConnectionManager(true));
			postMethod = new PostMethod(url);
			postMethod.setRequestHeader("Connection", "close");
			if (!token.isEmpty()) {
				postMethod.setRequestHeader("Authorization", token);
			}
			postMethod.getParams().setParameter("http.protocol.content-charset", "utf-8");

			logger.info("請求數據:" + requestBody);
			postMethod.setRequestBody(new NameValuePair[] { new NameValuePair("requestBody", requestBody) });
			HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams();
			postMethod.getParams().setParameter("http.method.retry-handler", new DefaultHttpMethodRetryHandler(1, false));
			managerParams.setConnectionTimeout(conTimeOut);
			managerParams.setSoTimeout(readTimeOut);
			client.executeMethod(postMethod);
			if (postMethod.getStatusCode() == 200) {
				response = postMethod.getResponseBodyAsString();
				logger.info("訪問:" + url + " 響應數據:" + response);
			} else {
				logger.error("訪問:" + url + "異常,響應狀態碼:" + postMethod.getStatusCode() + ",響應內容:"
						+ postMethod.getResponseBodyAsString());
			}
		} finally {
			if (postMethod != null) {
				postMethod.releaseConnection();
			}
		}
		return response;
	}
    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章