Java 位戳{“错误”:“未找到API密钥”}代码响应:200
我试图在java中向Bitstamp发出一个平衡请求,我编写了以下代码,但出现了以下错误: {“错误”:“未找到API密钥”} 代码回复:200 有人有主意吗 钥匙和秘密是交易所正确提供的,所以现在我想知道我是否在这一过程中犯了任何错误Java 位戳{“错误”:“未找到API密钥”}代码响应:200,java,web-services,base64,Java,Web Services,Base64,我试图在java中向Bitstamp发出一个平衡请求,我编写了以下代码,但出现了以下错误: {“错误”:“未找到API密钥”} 代码回复:200 有人有主意吗 钥匙和秘密是交易所正确提供的,所以现在我想知道我是否在这一过程中犯了任何错误 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; impor
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.HttpsURLConnection;
import javax.xml.bind.DatatypeConverter;
public class Main {
public static void main(String[] args) {
String key = "apiKeyDEMO";
String secret = "apiSecretDEMO";
Integer nonce = 100;
String ID = "123456";
String message = nonce.toString() + ID + key;
String signature = "";
try {
signature = encode(secret, message);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("key", key);
map.put("signature", signature);
map.put("nonce", nonce.toString());
StringBuilder urlParameters = new StringBuilder();
for (String k : map.keySet()) {
if(urlParameters.length() > 0) {
urlParameters.append("&");
}
urlParameters.append(k).append("=").append(URLEncoder.encode(map.get(k)));
}
//System.out.println(urlParameters);
try {
doPost(map);
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String encode(String secret, String message) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] hash = sha256_HMAC.doFinal(message.getBytes());
String signature = DatatypeConverter.printHexBinary(hash).toUpperCase();
//System.out.println(signature);
return signature;
}
private static String doPost( Map<String,String> params) throws IOException, NoSuchAlgorithmException, KeyManagementException {
//"param1=a¶m2=b¶m3=c"
StringBuilder urlParameters = new StringBuilder();
for (String key : params.keySet()) {
if(urlParameters.length() > 0) {
urlParameters.append("&");
}
//urlParameters.append(key).append("=").append(URLEncoder.encode(params.get(key)));
urlParameters.append(key).append("=").append(params.get(key));
}
String query = urlParameters.toString();
System.out.println(query);
URL url = new URL("https://www.bitstamp.net/api/balance/");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
//add reuqest header
con.setRequestMethod("POST");
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(query);
wr.flush();
wr.close();
String json = "";
if (con.getResponseCode() == HttpsURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new
InputStreamReader(con.getInputStream()));
String text;
while((text = br.readLine()) != null) {
json += text;
}
br.close();
}else{
;
}
con.disconnect();
System.out.println("Code Response: " + con.getResponseCode());
return json;
}
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.net.urlcoder;
导入java.security.KeyManagementException;
导入java.security.NoSuchAlgorithmException;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入javax.crypto.Mac;
导入javax.crypto.spec.SecretKeySpec;
导入javax.net.ssl.HttpsURLConnection;
导入javax.xml.bind.DatatypeConverter;
公共班机{
公共静态void main(字符串[]args){
String key=“apiKeyDEMO”;
String secret=“apiSecretDEMO”;
整数nonce=100;
字符串ID=“123456”;
字符串消息=nonce.toString()+ID+key;
字符串签名=”;
试一试{
签名=编码(秘密、消息);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Map Map=newlinkedhashmap();
地图。放置(“键”,键);
地图。放置(“签名”,签名);
map.put(“nonce”,nonce.toString());
StringBuilder urlParameters=新的StringBuilder();
for(字符串k:map.keySet()){
if(urlParameters.length()>0){
urlParameters.append(“&”);
}
urlParameters.append(k.append(“=”).append(urlcoder.encode(map.get(k));
}
//System.out.println(URL参数);
试一试{
doPost(map);
}捕获(密钥管理异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(无算法异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
公共静态字符串编码(字符串机密、字符串消息)引发异常{
Mac-sha256_-HMAC=Mac.getInstance(“HmacSHA256”);
SecretKeySpec secret_key=新的SecretKeySpec(secret.getBytes(),“HmacSHA256”);
sha256_HMAC.init(密钥);
byte[]hash=sha256hmac.doFinal(message.getBytes());
字符串签名=DatatypeConverter.printHexBinary(哈希).toUpperCase();
//系统输出打印号(签名);
返回签名;
}
私有静态字符串doPost(映射参数)引发IOException、NoSuchAlgorithmException、KeyManagementException{
//“参数1=a&参数2=b&参数3=c”
StringBuilder urlParameters=新的StringBuilder();
for(字符串键:params.keySet()){
if(urlParameters.length()>0){
urlParameters.append(“&”);
}
//urlParameters.append(key.append(“=”).append(urlcoder.encode(params.get(key));
urlParameters.append(key.append(“=”).append(params.get(key));
}
字符串查询=urlParameters.toString();
System.out.println(查询);
URL=新URL(“https://www.bitstamp.net/api/balance/");
HttpsURLConnection con=(HttpsURLConnection)url.openConnection();
//添加reuqest标题
con.setRequestMethod(“POST”);
//发送邮寄请求
con.设置输出(真);
DataOutputStream wr=新的DataOutputStream(con.getOutputStream());
writeBytes(查询);
wr.flush();
wr.close();
字符串json=“”;
if(con.getResponseCode()==HttpsURLConnection.HTTP\u确定){
BufferedReader br=新的BufferedReader(新的
InputStreamReader(con.getInputStream());
字符串文本;
而((text=br.readLine())!=null){
json+=文本;
}
br.close();
}否则{
;
}
con.disconnect();
System.out.println(“代码响应:+con.getResponseCode());
返回json;
}
}您是否记得在API页面上单击键旁边的激活?您是否找到过此项?我在使用XChange库时也遇到了同样的问题,这个库曾经工作过(在bitstamp上出现新的API外观之前,可能是相关的),当然我做到了!我找到了解决办法,但我重写了整件事。