From 02abb22c9142d62f3013c1357bedd05514106c53 Mon Sep 17 00:00:00 2001 From: Whois API LLC Date: Thu, 30 Mar 2017 17:05:15 +0300 Subject: [PATCH] Add examples with API key. Divide examples into 2 groups - Divide examples into two groups: access by passwrod and by API key - Add java code sample with API key access example --- apikey/java/.classpath | 29 +++++ apikey/java/.project | 23 ++++ apikey/java/pom.xml | 21 ++++ .../whoisxmlapi/test/ApiKeyClientTest.java | 114 ++++++++++++++++++ .../java}/DomainAvailabilityAPIQuery.java | 0 {java => password/java}/SimpleQuery.java | 0 .../java}/WhoisAPITest/build.xml | 0 .../WhoisAPITest/lib/commons-lang-2.4.jar | Bin .../lib/commons-logging-1.1.1.jar | Bin .../WhoisAPITest/lib/httpclient-4.0.1.jar | Bin .../java}/WhoisAPITest/lib/httpcore-4.0.1.jar | Bin .../java}/WhoisAPITest/lib/httpmime-4.0.1.jar | Bin .../java}/WhoisAPITest/manifest.mf | 0 .../WhoisAPITest/nbproject/build-impl.xml | 0 .../nbproject/genfiles.properties | 0 .../WhoisAPITest/nbproject/project.properties | 0 .../java}/WhoisAPITest/nbproject/project.xml | 0 .../src/whoisapitest/SimpleQuery.java | 0 {js => password/js}/whois_jquery_jsonp.html | 0 {js => password/js}/whois_js.html | 0 {net => password/net}/visualStudio/Whois.sln | 0 .../net}/visualStudio/Whois/Whois.csproj | 0 .../net}/visualStudio/Whois/app.config | 0 .../net}/visualStudio/Whois/whois.cs | 0 {net => password/net}/whois.cs | 0 {nodejs => password/nodejs}/whois.js | 0 {perl => password/perl}/whois.pl | 0 .../php}/domain_availability_api_test.php | 0 .../php}/whois_api_json_xml_test.php | 0 {php => password/php}/whois_api_test.php | 0 {powershell => password/powershell}/whois.ps1 | 0 {python => password/python}/whois.py | 0 {ruby => password/ruby}/whois.rb | 0 33 files changed, 187 insertions(+) create mode 100644 apikey/java/.classpath create mode 100644 apikey/java/.project create mode 100644 apikey/java/pom.xml create mode 100644 apikey/java/src/main/java/com/whoisxmlapi/test/ApiKeyClientTest.java rename {java => password/java}/DomainAvailabilityAPIQuery.java (100%) rename {java => password/java}/SimpleQuery.java (100%) rename {java => password/java}/WhoisAPITest/build.xml (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/lib/commons-lang-2.4.jar (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/lib/commons-logging-1.1.1.jar (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/lib/httpclient-4.0.1.jar (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/lib/httpcore-4.0.1.jar (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/lib/httpmime-4.0.1.jar (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/manifest.mf (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/nbproject/build-impl.xml (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/nbproject/genfiles.properties (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/nbproject/project.properties (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/nbproject/project.xml (100%) mode change 100755 => 100644 rename {java => password/java}/WhoisAPITest/src/whoisapitest/SimpleQuery.java (100%) mode change 100755 => 100644 rename {js => password/js}/whois_jquery_jsonp.html (100%) rename {js => password/js}/whois_js.html (100%) rename {net => password/net}/visualStudio/Whois.sln (100%) rename {net => password/net}/visualStudio/Whois/Whois.csproj (100%) rename {net => password/net}/visualStudio/Whois/app.config (100%) rename {net => password/net}/visualStudio/Whois/whois.cs (100%) rename {net => password/net}/whois.cs (100%) rename {nodejs => password/nodejs}/whois.js (100%) rename {perl => password/perl}/whois.pl (100%) rename {php => password/php}/domain_availability_api_test.php (100%) rename {php => password/php}/whois_api_json_xml_test.php (100%) rename {php => password/php}/whois_api_test.php (100%) rename {powershell => password/powershell}/whois.ps1 (100%) rename {python => password/python}/whois.py (100%) rename {ruby => password/ruby}/whois.rb (100%) diff --git a/apikey/java/.classpath b/apikey/java/.classpath new file mode 100644 index 0000000..9c85d61 --- /dev/null +++ b/apikey/java/.classpath @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apikey/java/.project b/apikey/java/.project new file mode 100644 index 0000000..147f8fd --- /dev/null +++ b/apikey/java/.project @@ -0,0 +1,23 @@ + + + TestClient + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/apikey/java/pom.xml b/apikey/java/pom.xml new file mode 100644 index 0000000..0cd3abe --- /dev/null +++ b/apikey/java/pom.xml @@ -0,0 +1,21 @@ + + 4.0.0 + LLC + com.whoisxmlapi + 1.0 + + + + commons-httpclient + commons-httpclient + 3.1 + + + org.json + json + 20160810 + + + + \ No newline at end of file diff --git a/apikey/java/src/main/java/com/whoisxmlapi/test/ApiKeyClientTest.java b/apikey/java/src/main/java/com/whoisxmlapi/test/ApiKeyClientTest.java new file mode 100644 index 0000000..43a2eda --- /dev/null +++ b/apikey/java/src/main/java/com/whoisxmlapi/test/ApiKeyClientTest.java @@ -0,0 +1,114 @@ +package com.whoisxmlapi.test; + +import java.net.URLEncoder; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Hex; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.json.JSONException; +import org.json.JSONObject; + +public class ApiKeyClientTest { + + private Logger logger = Logger.getLogger(ApiKeyClientTest.class.getName()); + + public static void main(String[]args) { + new ApiKeyClientTest().getSimpleDomainUsingApiKey(); + } + + private void getSimpleDomainUsingApiKey() { + String domainName = "test.com"; + + String username = "username"; + String apiKey = "apiKey"; + String secretKey = "secretKey"; + + getDomainNameUsingApiKey(domainName, username, apiKey, secretKey); + } + + private String executeURL(String url) { + HttpClient c = new HttpClient(); + System.out.println(url); + HttpMethod m = new GetMethod(url); + String res = null; + try { + c.executeMethod(m); + res = new String(m.getResponseBody()); + } catch (Exception e) { + logger.log(Level.SEVERE, "Cannot get url", e); + } finally { + m.releaseConnection(); + } + return res; + } + + public void getDomainNameUsingApiKey(String domainName, String username, String apiKey, String secretKey) { + String apiKeyAuthenticationRequest = generateApiKeyAuthenticationRequest(username, apiKey, secretKey); + if (apiKeyAuthenticationRequest == null) { + return; + } + + StringBuilder sb = new StringBuilder(); + sb.append("http://www.whoisxmlapi.com/whoisserver/WhoisService?"); + sb.append(apiKeyAuthenticationRequest); + sb.append("&domainName="); + sb.append(domainName); + + String url = sb.toString(); + + String result = executeURL(url); + if (result != null) { + logger.log(Level.INFO, "result: " + result); + } + } + + private String generateApiKeyAuthenticationRequest(String username, String apiKey, String secretKey) { + try { + long timestamp = System.currentTimeMillis(); + + String request = generateRequest(username, timestamp); + String digest = generateDigest(username, apiKey, secretKey, timestamp); + + String requestURL = URLEncoder.encode(request, "UTF-8"); + String digestURL = URLEncoder.encode(digest, "UTF-8"); + + String apiKeyAuthenticationRequest = "requestObject="+requestURL+"&digest="+digestURL; + return apiKeyAuthenticationRequest; + } catch (Exception e) { + logger.log(Level.SEVERE, "an error occurred", e); + } + return null; + } + + private String generateRequest(String username, long timestamp) throws JSONException { + JSONObject json = new JSONObject(); + json.put("u", username); + json.put("t", timestamp); + String jsonStr = json.toString(); + byte[] json64 = Base64.encodeBase64(jsonStr.getBytes()); + String json64Str = new String(json64); + return json64Str; + } + + private String generateDigest(String username, String apiKey, String secretKey, long timestamp) throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append(username); + sb.append(timestamp); + sb.append(apiKey); + + SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacMD5"); + Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm()); + mac.init(secretKeySpec); + + byte[] digestBytes = mac.doFinal(sb.toString().getBytes("UTF-8")); + String digest = new String(Hex.encodeHex(digestBytes)); + return digest; + } +} diff --git a/java/DomainAvailabilityAPIQuery.java b/password/java/DomainAvailabilityAPIQuery.java similarity index 100% rename from java/DomainAvailabilityAPIQuery.java rename to password/java/DomainAvailabilityAPIQuery.java diff --git a/java/SimpleQuery.java b/password/java/SimpleQuery.java similarity index 100% rename from java/SimpleQuery.java rename to password/java/SimpleQuery.java diff --git a/java/WhoisAPITest/build.xml b/password/java/WhoisAPITest/build.xml old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/build.xml rename to password/java/WhoisAPITest/build.xml diff --git a/java/WhoisAPITest/lib/commons-lang-2.4.jar b/password/java/WhoisAPITest/lib/commons-lang-2.4.jar old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/lib/commons-lang-2.4.jar rename to password/java/WhoisAPITest/lib/commons-lang-2.4.jar diff --git a/java/WhoisAPITest/lib/commons-logging-1.1.1.jar b/password/java/WhoisAPITest/lib/commons-logging-1.1.1.jar old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/lib/commons-logging-1.1.1.jar rename to password/java/WhoisAPITest/lib/commons-logging-1.1.1.jar diff --git a/java/WhoisAPITest/lib/httpclient-4.0.1.jar b/password/java/WhoisAPITest/lib/httpclient-4.0.1.jar old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/lib/httpclient-4.0.1.jar rename to password/java/WhoisAPITest/lib/httpclient-4.0.1.jar diff --git a/java/WhoisAPITest/lib/httpcore-4.0.1.jar b/password/java/WhoisAPITest/lib/httpcore-4.0.1.jar old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/lib/httpcore-4.0.1.jar rename to password/java/WhoisAPITest/lib/httpcore-4.0.1.jar diff --git a/java/WhoisAPITest/lib/httpmime-4.0.1.jar b/password/java/WhoisAPITest/lib/httpmime-4.0.1.jar old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/lib/httpmime-4.0.1.jar rename to password/java/WhoisAPITest/lib/httpmime-4.0.1.jar diff --git a/java/WhoisAPITest/manifest.mf b/password/java/WhoisAPITest/manifest.mf old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/manifest.mf rename to password/java/WhoisAPITest/manifest.mf diff --git a/java/WhoisAPITest/nbproject/build-impl.xml b/password/java/WhoisAPITest/nbproject/build-impl.xml old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/nbproject/build-impl.xml rename to password/java/WhoisAPITest/nbproject/build-impl.xml diff --git a/java/WhoisAPITest/nbproject/genfiles.properties b/password/java/WhoisAPITest/nbproject/genfiles.properties old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/nbproject/genfiles.properties rename to password/java/WhoisAPITest/nbproject/genfiles.properties diff --git a/java/WhoisAPITest/nbproject/project.properties b/password/java/WhoisAPITest/nbproject/project.properties old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/nbproject/project.properties rename to password/java/WhoisAPITest/nbproject/project.properties diff --git a/java/WhoisAPITest/nbproject/project.xml b/password/java/WhoisAPITest/nbproject/project.xml old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/nbproject/project.xml rename to password/java/WhoisAPITest/nbproject/project.xml diff --git a/java/WhoisAPITest/src/whoisapitest/SimpleQuery.java b/password/java/WhoisAPITest/src/whoisapitest/SimpleQuery.java old mode 100755 new mode 100644 similarity index 100% rename from java/WhoisAPITest/src/whoisapitest/SimpleQuery.java rename to password/java/WhoisAPITest/src/whoisapitest/SimpleQuery.java diff --git a/js/whois_jquery_jsonp.html b/password/js/whois_jquery_jsonp.html similarity index 100% rename from js/whois_jquery_jsonp.html rename to password/js/whois_jquery_jsonp.html diff --git a/js/whois_js.html b/password/js/whois_js.html similarity index 100% rename from js/whois_js.html rename to password/js/whois_js.html diff --git a/net/visualStudio/Whois.sln b/password/net/visualStudio/Whois.sln similarity index 100% rename from net/visualStudio/Whois.sln rename to password/net/visualStudio/Whois.sln diff --git a/net/visualStudio/Whois/Whois.csproj b/password/net/visualStudio/Whois/Whois.csproj similarity index 100% rename from net/visualStudio/Whois/Whois.csproj rename to password/net/visualStudio/Whois/Whois.csproj diff --git a/net/visualStudio/Whois/app.config b/password/net/visualStudio/Whois/app.config similarity index 100% rename from net/visualStudio/Whois/app.config rename to password/net/visualStudio/Whois/app.config diff --git a/net/visualStudio/Whois/whois.cs b/password/net/visualStudio/Whois/whois.cs similarity index 100% rename from net/visualStudio/Whois/whois.cs rename to password/net/visualStudio/Whois/whois.cs diff --git a/net/whois.cs b/password/net/whois.cs similarity index 100% rename from net/whois.cs rename to password/net/whois.cs diff --git a/nodejs/whois.js b/password/nodejs/whois.js similarity index 100% rename from nodejs/whois.js rename to password/nodejs/whois.js diff --git a/perl/whois.pl b/password/perl/whois.pl similarity index 100% rename from perl/whois.pl rename to password/perl/whois.pl diff --git a/php/domain_availability_api_test.php b/password/php/domain_availability_api_test.php similarity index 100% rename from php/domain_availability_api_test.php rename to password/php/domain_availability_api_test.php diff --git a/php/whois_api_json_xml_test.php b/password/php/whois_api_json_xml_test.php similarity index 100% rename from php/whois_api_json_xml_test.php rename to password/php/whois_api_json_xml_test.php diff --git a/php/whois_api_test.php b/password/php/whois_api_test.php similarity index 100% rename from php/whois_api_test.php rename to password/php/whois_api_test.php diff --git a/powershell/whois.ps1 b/password/powershell/whois.ps1 similarity index 100% rename from powershell/whois.ps1 rename to password/powershell/whois.ps1 diff --git a/python/whois.py b/password/python/whois.py similarity index 100% rename from python/whois.py rename to password/python/whois.py diff --git a/ruby/whois.rb b/password/ruby/whois.rb similarity index 100% rename from ruby/whois.rb rename to password/ruby/whois.rb