최근 개인 호기심 프로젝트의 일환으로 Poloniex (암호 해독 교환)에 사용할 매우 간단한 봇을 작성했습니다. 공개 API가 제대로 작동하도록 할 수 있었지만 거래 API 테스트를 시작했을 때 문제가 발생하기 시작했습니다. 내가 이것을 실행할 때 (그리고 30 가지 다른 것들이 작동하도록 시도 할 때) 나는 모두 {"error":"Invalid command."}
입니다. 나는 기본적으로 사용하고있는 라이브러리 하나 하나를 처음 사용하는데 익숙하지 않으므로, 좁힐 수없는 에러에 대한 엄청난 마진이있다.Poloniex 대출 봇이 반환하지 않는 이유는 무엇입니까?
Poloniex API 문서는 여기에 있습니다 : 내가 답을 찾기 위해 물건을 인터넷 검색을하는 동안 https://poloniex.com/support/api/
public String returnBalances() {
try {
long nonce = System.nanoTime();
String params = "command=returnBalances&nonce=" + nonce;
URL u = new URL(URL_PRIVATE + "?" + params);
String sign = getSign(params);
if(sign == null) return null;
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("GET");
huc.setRequestProperty("Key", API_Key);
huc.setRequestProperty("Sign", sign);
huc.setRequestProperty("nonce", String.valueOf(nonce));
return getDataFromHUC(huc);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private String getSign(String c) {
try {
SecretKeySpec mac_key = new SecretKeySpec(API_secret.getBytes(), "HmacSHA512");
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(mac_key);
String sign = bytesToHex(mac.doFinal((c).getBytes()));
return sign;
}
catch (Exception e) {
return null;
}
}
private String getDataFromHUC(HttpURLConnection huc) {
try {
huc.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
String data = sb.toString();
return data;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
또한, 내가 아닌 한 사람이 (내가)를 java.net
라이브러리를 사용하는 것을 발견했다. 내가해야 할 일에 완전히 빠졌습니까? 가능하다면이 라이브러리를 사용하는 편이 좋을 것입니다. 그래서 내가 할 수있는만큼 배후에서 무슨 일이 일어나는지 실제로 배울 수 있습니다.
여기 또는 다른 웹 사이트에 명백한 답변이 있으면 죄송합니다. 나는 지금 몇 시간 동안 진전이 없었으므로 실수 할 의무가있다.
P. 나는 런타임 오류 처리가 아마도 매우 낮은 품질이라는 것을 알고 있지만 개선에 아무런 문제가 없으므로 개선이 최우선 과제입니다.
완벽하게 작동했지만 실제로 이유를 이해하지 못합니다. 내가 설정하는 실수는 GET 요청이며 콘텐츠 유형 및 크기를 설정하지 않는 것입니다. 명령과 넌스를 직접 보낼 때 Sign를 암호화하는 것은 무엇입니까? –
기호는 실제로 그 명령을 보내고 다른 사람은 보내지 않도록하기위한 서명입니다. (Man-in-the-middle 공격 및 유사한 방지). https에 연결하면 이미 SSL 암호화를 사용하므로 아무 것도 암호화하지 않습니다. 이는 HTTP 클라이언트가 처리합니다. – Cyphrags