Springboot+web3j(4.7)+实战+填坑
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 + '\'' +
'}';
}
}