JSON parsing을 위해 Gson 라이브러리를 사용하여 제공하고 있습니다. Gson 라이브러리에 대한 자세한 설명은 https://github.com/google/gson 에서 확인 하실 수 있습니다.
////////////////////////// 문서 등록 REST API //////////////////////////
import com.google.gson.Gson;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class Example {
static public void main ( String[] args ) {
String openApiURL = "http://aiopen.etri.re.kr:8000/DocUpload";
String accessKey = "YOUR_ACCESS_KEY"; // 발급받은 API Key
Path path = Paths.get("YOUR_FILE");// 전체 경로가 포함된 업로드할 한글 문서
Gson gson = new Gson();
Map<String, String> argument = new HashMap<>();
argument.put("type", "hwp");
Map<String, Object> json = new HashMap<>();
json.put("argument", argument);
URL url;
Integer responseCode = null;
String responBody = null;
String boundary = null;
try {
url = new URL(openApiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
boundary = UUID.randomUUID().toString();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.setRequestProperty("Authorization", accessKey);
con.setDoInput(true);
con.setUseCaches(false);
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Cache-Control", "no-cache");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes("--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"json\"\r\n\r\n");
wr.writeBytes(gson.toJson(json) + "\r\n");
wr.writeBytes("--" + boundary + "\r\n");
wr.writeBytes("Content-Disposition: form-data; name=\"doc_file\"; filename=\"" + path.getFileName() + "\"\r\n\r\n");
wr.write(Files.readAllBytes(path));
wr.writeBytes("\r\n");
wr.writeBytes("--" + boundary + "--\r\n");
wr.flush();
wr.close();
responseCode = con.getResponseCode();
InputStream is = con.getInputStream();
byte[] buffer = new byte[is.available()];
int byteRead = is.read(buffer);
responBody = new String(buffer);
System.out.println("[responseCode] " + responseCode);
System.out.println("[responBody]");
System.out.println(responBody);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
////////////////////////// 질의응답 REST API //////////////////////////
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
public class Example {
static public void main ( String[] args ) {
String openApiURL = "http://aiopen.etri.re.kr:8000/DocQA";
String accessKey = "YOUR_ACCESS_KEY"; // 발급받은 API Key
String question = "YOUR_QUESTION"; // 질문 데이터
String doc_key= "YOUR_DOC_KEY";
Gson gson = new Gson();
Map<String, Object> request = new HashMap<>();
Map<String, String> argument = new HashMap<>();
argument.put("question", question);
argument.put("doc_key", doc_key);
request.put("argument", argument);
URL url;
Integer responseCode = null;
String responBody = null;
try {
url = new URL(openApiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setRequestProperty("Authorization", accessKey);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.write(gson.toJson(request).getBytes("UTF-8"));
wr.flush();
wr.close();
responseCode = con.getResponseCode();
InputStream is = con.getInputStream();
byte[] buffer = new byte[is.available()];
int byteRead = is.read(buffer);
responBody = new String(buffer);
System.out.println("[responseCode] " + responseCode);
System.out.println("[responBody]");
System.out.println(responBody);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//////////////////////////// 문서 등록 REST API
<?php
$openApiURL = "http://aiopen.etri.re.kr:8000/DocUpload";
$accessKey = "YOUR_ACCESS_KEY";
$filePath = "YOUR_FILE_PATH";
$uploadfile = file_get_contents($filePath);
$request = array(
"argument" => array ("type" => "hwp")
);
try {
$boundary = uniqid();
$body = '';
$eol = "\r\n";
$delimiter = '-------------'.$boundary;
$body .= "--".$delimiter.$eol
.'Content-Disposition: form-data; name="json"'.$eol.$eol
.json_encode($request).$eol;
$body .= "--".$delimiter.$eol
.'Content-Disposition: form-data; name="doc_file"; filename="'.basename($filePath).'"' . $eol
.'Content-Transfer-Encoding: binary'.$eol;
$body .= $eol;
$body .= $uploadfile.$eol;
$body .= "--" . $delimiter . "--".$eol;
$server_output = "";
$ch = curl_init();
$header = array(
"Content-Type: multipart/form-data; boundary=" . $delimiter,"Authorization":{$accessKey}
"Content-Length: " . strlen($body)
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $openApiURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body );
$server_output = curl_exec ($ch);
if($server_output === false) {
echo "Error Number:".curl_errno($ch)."\n";
echo "Error String:".curl_error($ch)."\n";
}
curl_close ($ch);
} catch ( Exception $e ) {
echo $e->getMessage ();
}
echo "result = " . var_dump($server_output);
?>
//////////////////////////// 질의응답 REST API
<?php
$openApiURL = "http://aiopen.etri.re.kr:8000/DocQA";
$accessKey = "YOUR_ACCESS_KEY";
$question = "YOUR_QUESTION";
$doc_key = "YOUR_DOC_KEY";
$request = array(
"argument" => array (
"question" => $question,
"doc_key" => $doc_key
)
);
try {
$server_output = "";
$ch = curl_init();
$header = array(
"Content-Type:application/json; charset=UTF-8","Authorization":{$accessKey}
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_URL, $openApiURL);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode ( $request) );
$server_output = curl_exec ($ch);
if($server_output === false) {
echo "Error Number:".curl_errno($ch)."\n";
echo "Error String:".curl_error($ch)."\n";
}
curl_close ($ch);
} catch ( Exception $e ) {
echo $e->getMessage ();
}
echo "result = " . var_dump($server_output);
?>
JSON parsing을 위해 jsoncpp 라이브러리를 사용하여 제공하고 있습니다. jsoncpp 라이브러리에 대한 자세한 설명은 https://github.com/open-source-parsers/jsoncpp 에서 확인 하실 수 있습니다.
HTTP 통신을 위해 curl 라이브러리를 사용하여 제공하고 있습니다. curl 라이브러리에 대한 자세한 설명은 https://curl.haxx.se/libcurl 에서 확인 하실 수 있습니다.
컴파일을 위해서는 아래와 같이 추가된 LIB에 대한 옵션을 추가해야 합니다.
g++ (c++파일명) (JSONCPP)/json/json.h (JSONCPP)/json/json-forwards.h (JSONCPP)/jsoncpp.cpp -I(CURL)/include -lcurl
//////////////////////////// 문서 등록 REST API
#include <curl/curl.h>
#include <json/json.h>
#include <iostream>
#include <string>
#include <memory.h>
#include <fstream>
#include <math.h>
#include <cstdlib>
#include <filesystem>
using namespace std;
namespace fs = std::filesystem;
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, string stream);
int main() {
char* openApiURL = (char*)"http://aiopen.etri.re.kr:8000/DocUpload";
char* uploadFilePath = (char*)"YOUR_FILE_PATH";
string accessKey = "YOUR_ACCESS_KEY";
Json::Value request;
Json::Value argument;
argument["type"] = "hwp";
request["argument"] = argument;
CURL *curl;
curl_slist* responseHeaders = NULL;
curl = curl_easy_init();
if( curl == NULL ) {
} else {
string body;
long bodySize = 0L;
// read file
ifstream fl(uploadFilePath, ios::binary | ios::ate);
size_t fileSize = fl.tellg();
string fileContent(fileSize, '\0');
fl.seekg(0);
fl.read(&fileContent[0], fileSize);
fl.close();
string CRLF = "\r\n";
srand((unsigned int)time(NULL));
string BOUNDARY = std::to_string( rand() );
string DELIMITER = "-------------" + BOUNDARY;
body.append("--"+DELIMITER+CRLF);
body.append("Content-Disposition: form-data; name=\"json\""+CRLF+CRLF);
body.append(CRLF);
body.append(request.toStyledString()+CRLF);
// now we add the file
string fileName = fs::path(uploadFilePath).filename();
body.append("--"+DELIMITER+CRLF);
body.append("Content-Disposition: form-data; name=\"doc_file\"; filename=\""+fileName+"\""+CRLF);
body.append("Content-Transfer-Encoding: binary"+CRLF+CRLF);
string bodyEnd = CRLF+"--"+DELIMITER+"--"+CRLF;
body.append(fileContent);
body.append(bodyEnd);
char *bodyChars = &body[0];
bodySize = strlen(body.c_str()) + fileSize + strlen(bodyEnd.c_str());
responseHeaders = curl_slist_append(responseHeaders, ("Content-Type: multipart/form-data; boundary="+DELIMITER).c_str());
responseHeaders = curl_slist_append(responseHeaders, ("Authorization: " + accessKey).c_str() ) ;
responseHeaders = curl_slist_append(responseHeaders, ("Content-Length: " + to_string(bodySize)).c_str() ) ;
long statusCode;
string response;
curl_easy_setopt(curl, CURLOPT_URL, openApiURL);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, responseHeaders ) ;
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 10);
curl_easy_setopt(curl, CURLOPT_VERBOSE, true);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, bodyChars);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, bodySize);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeDataFunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &statusCode);
curl_easy_cleanup(curl);
cout << "[responseCode] " << statusCode << endl;
cout << "[responBody]" << endl;
cout << response << endl;
}
return 0;
}
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, string stream) {
size_t realsize = size * nmemb;
string temp(static_cast<const char*>(ptr), realsize);
stream.append(temp);
return realsize;
}
//////////////////////////// 질의응답 REST API
#include <curl/curl.h>
#include <json/json.h>
#include <iostream>
#include <string>
using namespace std;
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, std::string stream);
int main() {
char* openApiURL = (char*)"http://aiopen.etri.re.kr:8000/DocQA";
string accessKey = "YOUR_ACCESS_KEY";
string question = "YOUR_QUESTION";
string doc_key = "YOUR_DOC_KEY";
Json::Value request;
Json::Value argument;
argument["question"] = question ;
argument["doc_key "] = doc_key ;
request["argument"] = argument;
CURL *curl;
curl_slist* responseHeaders = NULL;
curl = curl_easy_init();
if( curl == NULL ) {
cout << "Unable to initialize cURL interface" << endl ;
} else {
responseHeaders = curl_slist_append( responseHeaders , "Content-Type: application/json; charset=UTF-8" ) ;
responseHeaders = curl_slist_append(responseHeaders, ("Authorization: " + accessKey).c_str() ) ;
string requestJson = request.toStyledString();
long statusCode;
string response;
curl_easy_setopt(curl, CURLOPT_URL, openApiURL);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, responseHeaders ) ;
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestJson.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeDataFunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_perform(curl);
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &statusCode);
curl_easy_cleanup(curl);
cout << "[responseCode] " << statusCode << endl;
cout << "[responBody]" << endl;
cout << response << endl;
}
return 0;
}
size_t writeDataFunc(void *ptr, size_t size, size_t nmemb, std::string stream) {
size_t realsize = size * nmemb;
std::string temp(static_cast<const char*>(ptr), realsize);
stream.append(temp);
return realsize;
}
python 3.0을 기준으로 작성되었습니다.
HTTP 통신을 위해 urllib3 라이브러리를 사용하여 제공하고 있습니다. Python 3.0 이하의 버전에서 예제를 실행하기 위해서는 별도로 urllib3의 설치가 필요합니다. 설치에 대한 설명은 https://pypi.python.org/pypi/urllib3 를 참고하시기 바랍니다. urllib3 라이브러리에 대한 자세한 설명은 https://urllib3.readthedocs.io/en/latest/ 에서 확인 하실 수 있습니다.
############################# 문서 등록 REST API
#-*- coding:utf-8 -*-
import urllib3
import json
import os
openApiURL = "http://aiopen.etri.re.kr:8000/DocUpload"
accessKey = "YOUR_ACCESS_KEY"
uploadFilePath = "YOUR_FILE_PATH"
file = open(uploadFilePath,'rb')
fileContent = file.read()
file.close();
requestJson = {
"argument": {"type" : "hwp"}
}
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers={"Authorization": accessKey},
fields={
'json': json.dumps(requestJson),
'doc_file': (os.path.basename(file.name), fileContent)
}
)
print("[responseCode] " + str(response.status))
print("[responBody]")
print(response.data)
############################# 질의응답 REST API
import urllib3
import json
openApiURL = "http://aiopen.etri.re.kr:8000/DocQA"
accessKey = "YOUR_ACCESS_KEY"
question = "YOUR_QUESTION"
doc_key = "YOUR_DOC_KEY"
requestJson = {
"argument": {
"question": question,
"doc_key": doc_key
}
}
http = urllib3.PoolManager()
response = http.request(
"POST",
openApiURL,
headers={"Content-Type": "application/json; charset=UTF-8","Authorization": accessKey},
body=json.dumps(requestJson)
)
print("[responseCode] " + str(response.status))
print("[responBody]")
print(str(response.data,"utf-8"))
//////////////////////////// 문서 등록 REST API
var fs = require('fs');
var path = require("path");
var openApiURL = 'http://aiopen.etri.re.kr:8000/DocUpload';
var accessKey = 'YOUR_ACCESS_KEY';
var uploadFilePath = 'YOUR_FILE_PATH';
var fileData;
var fileData = fs.readFileSync(uploadFilePath);
var requestJson = {
'argument': {'type' : 'hwp'}
};
var BOUNDARY = Math.random() * Date.now();
var DELIMITER = "-------------" + BOUNDARY;
var CRLF = "\r\n";
// request json data
var data = "--" + DELIMITER + CRLF;
data += "Content-Disposition: form-data; name=\"json\""+CRLF+CRLF;
data += JSON.stringify(requestJson)+CRLF;
// request file data
data += "--" + DELIMITER + CRLF;
data += "Content-Disposition: form-data; name=\"doc_file\"; filename=\""+path.basename(uploadFilePath)+"\""+CRLF;
data += "Content-Transfer-Encoding: binary"+CRLF+CRLF
var payload = Buffer.concat([
new Buffer(data),
new Buffer(fileData, 'binary'),
new Buffer(CRLF+"--"+DELIMITER+"--"+CRLF)
]);
var request = require('request');
var options = {
url: openApiURL,
body: payload,
headers: {"Content-Type": "multipart/form-data; boundary=" + DELIMITER,'Authorization':access_key}
};
request.post(options, function (error, response, body) {
console.log('responseCode = ' + response.statusCode);
console.log('responseBody = ' + body);
});
//////////////////////////// 질의응답 REST API
var openApiURL = 'http://aiopen.etri.re.kr:8000/DocQA';
var access_key = 'YOUR_ACCESS_KEY';
var question = 'YOUR_QUESTION';
var doc_key = "YOUR_DOC_KEY";
var requestJson = {
'argument': {
'question': question,
'doc_key':doc_key
}
};
var request = require('request');
var options = {
url: openApiURL,
body: JSON.stringify(requestJson),
headers: {'Content-Type':'application/json; charset=UTF-8','Authorization':access_key}
};
request.post(options, function (error, response, body) {
console.log('responseCode = ' + response.statusCode);
console.log('responseBody = ' + body);
});