Springboot+web3j(4.7)+实战+填坑

时间:2025-03-27 07:14:56
package com.fc.service.mananger; import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Component; import java.io.IOException; import java.net.URI; import java.util.*; /** * @author ydw * @version 1.0 * @date 2020/11/6 11:40 */ @Component public class EtherscanApiDemo { public void getUserRelationship() { String startBlockNumber = "";// 开始区块 String inviteContractAddress = "";// 合约地址 String apiKey = "";// 中你自己的apikey String inviteContractTopic = ""; // 合约 event 的 topic String url = ""; // url: "/api"; 主网 // url: "/api" 测试网 Map<String, Object> parameters = new HashMap<>(7); parameters.put("module", "logs"); parameters.put("action", "getLogs"); parameters.put("fromBlock", startBlockNumber); parameters.put("toBlock", "latest"); parameters.put("address", inviteContractAddress); parameters.put("topic0", inviteContractTopic); parameters.put("apikey", apiKey); String response = HttpUtil.doGet(url, parameters); TransactionsResponse tr = JSONObject.parseObject(response, TransactionsResponse.class); } } import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * httpClient工具类 * * @author heyi */ class HttpUtil { private final static int NORMAL_STATUS = 200; /** * get请求处理 * * @param url * @param args * @return */ public static String doGet(String url, Map<String, Object>... args) { //创建默认的httpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); //httpResponse响应对象 CloseableHttpResponse response = null; //响应返回结果 String resultString = ""; try { //创建uri URIBuilder builder = new URIBuilder(url); if (args.length > 0) { args[0].forEach((k, v) -> builder.addParameter(k, String.valueOf(v))); } URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); // 执行请求 response = httpClient.execute(httpGet); // 判断返回状态是否为200 if (response != null && response.getStatusLine().getStatusCode() == NORMAL_STATUS) { // 获取响应实体 HttpEntity httpEntity = response.getEntity(); resultString = EntityUtils.toString(httpEntity, "UTF-8"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } /** * post请求处理 * * @param url * @param args args[0] formdata args[1] header * @return */ public static String doPost(String url, Map<String, Object>... args) { //创建默认的httpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); //httpResponse响应对象 CloseableHttpResponse response = null; //响应返回结果 String resultString = ""; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); if (args.length > 1) { args[1].forEach((k, v) -> httpPost.setHeader(k, String.valueOf(v))); } // 创建参数列表 if (args.length > 0) { List<NameValuePair> formParams = new ArrayList<NameValuePair>(); args[0].forEach((k, v) -> formParams.add(new BasicNameValuePair(k, String.valueOf(v)))); // 模拟表单 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8"); httpPost.setEntity(entity); } //执行http请求 response = httpClient.execute(httpPost); //获取响应结果 // 判断返回状态是否为200 if (response != null && response.getStatusLine().getStatusCode() == NORMAL_STATUS) { resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } /** * post请求处理 * * @param url * @return */ public static String doPostJson(String url, String json) { //创建默认的httpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); //httpResponse响应对象 CloseableHttpResponse response = null; //响应返回结果 String resultString = ""; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); // 创建参数列表 httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); StringEntity se = new StringEntity(json, "UTF-8"); se.setContentType("application/json"); httpPost.setEntity(se); //执行http请求 response = httpClient.execute(httpPost); //获取响应结果 // 判断返回状态是否为200 if (response != null && response.getStatusLine().getStatusCode() == NORMAL_STATUS) { resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } } class TransactionsResponse { private String status; private String message; private List<Transactions> result = new ArrayList<Transactions>(); public TransactionsResponse() { } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public List<Transactions> getResult() { return result; } public void setResult(List<Transactions> result) { this.result = result; } @Override public String toString() { return "TransactionsResponse [status=" + status + ", message=" + message + ", result=" + result + "]"; } } class Transactions { private String blockNumber; private String timeStamp; private String hash; private String nonce; private String blockHash; private String transactionIndex; private String from; private String to; private String value; private String gas; private String gasPrice; private String isError; private String txreceipt_status; private String input; private String contractAddress; private String cumulativeGasUsed; private String gasUsed; private String confirmations; private String address; private String[] topics; private String data; private String logIndex; private String transactionHash; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String[] getTopics() { return topics; } public void setTopics(String[] topics) { this.topics = topics; } public String getData() { return data; } public void setData(String data) { this.data = data; } public String getLogIndex() { return logIndex; } public void setLogIndex(String logIndex) { this.logIndex = logIndex; } public String getTransactionHash() { return transactionHash; } public void setTransactionHash(String transactionHash) { this.transactionHash = transactionHash; } public Transactions() { } public String getBlockNumber() { return blockNumber; } public void setBlockNumber(String blockNumber) { this.blockNumber = blockNumber; } public String getTimeStamp() { return timeStamp; } public void setTimeStamp(String timeStamp) { this.timeStamp = timeStamp; } public String getHash() { return hash; } public void setHash(String hash) { this.hash = hash; } public String getNonce() { return nonce; } public void setNonce(String nonce) { this.nonce = nonce; } public String getBlockHash() { return blockHash; } public void setBlockHash(String blockHash) { this.blockHash = blockHash; } public String getTransactionIndex() { return transactionIndex; } public void setTransactionIndex(String transactionIndex) { this.transactionIndex = transactionIndex; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getTo() { return to; } public void setTo(String to) { this.to = to; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getGas() { return gas; } public void setGas(String gas) { this.gas = gas; } public String getGasPrice() { return gasPrice; } public void setGasPrice(String gasPrice) { this.gasPrice = gasPrice; } public String getIsError() { return isError; } public void setIsError(String isError) { this.isError = isError; } public String getTxreceipt_status() { return txreceipt_status; } public void setTxreceipt_status(String txreceipt_status) { this.txreceipt_status = txreceipt_status; } public String getInput() { return input; } public void setInput(String input) { this.input = input; } public String getContractAddress() { return contractAddress; } public void setContractAddress(String contractAddress) { this.contractAddress = contractAddress; } public String getCumulativeGasUsed() { return cumulativeGasUsed; } public void setCumulativeGasUsed(String cumulativeGasUsed) { this.cumulativeGasUsed = cumulativeGasUsed; } public String getGasUsed() { return gasUsed; } public void setGasUsed(String gasUsed) { this.gasUsed = gasUsed; } public String getConfirmations() { return confirmations; } public void setConfirmations(String confirmations) { this.confirmations = confirmations; } @Override public String toString() { return "Transactions{" + "blockNumber='" + blockNumber + '\'' + ", timeStamp='" + timeStamp + '\'' + ", hash='" + hash + '\'' + ", nonce='" + nonce + '\'' + ", blockHash='" + blockHash + '\'' + ", transactionIndex='" + transactionIndex + '\'' + ", from='" + from + '\'' + ", to='" + to + '\'' + ", value='" + value + '\'' + ", gas='" + gas + '\'' + ", gasPrice='" + gasPrice + '\'' + ", isError='" + isError + '\'' + ", txreceipt_status='" + txreceipt_status + '\'' + ", input='" + input + '\'' + ", contractAddress='" + contractAddress + '\'' + ", cumulativeGasUsed='" + cumulativeGasUsed + '\'' + ", gasUsed='" + gasUsed + '\'' + ", confirmations='" + confirmations + '\'' + ", address='" + address + '\'' + ", topics=" + Arrays.toString(topics) + ", data='" + data + '\'' + ", logIndex='" + logIndex + '\'' + ", transactionHash='" + transactionHash + '\'' + '}'; } }