image (CAPTCHAイメージ)
- 印刷する
- PDF
image (CAPTCHAイメージ)
- 印刷する
- PDF
Article Summary
Share feedback
Thanks for sharing your feedback!
イメージCAPTCHA API
イメージCAPTCHA APIは、自動入力の防止のために人の目で識別可能な文字が含まれたイメージを転送して入力値を検証するREST APIです。
非ログインのオープンAPIであるため、GETで呼び出す時、HTTPヘッダにアプリケーションを登録する際に発行されたClient IDとClient Secretの値を一緒に送信することで活用できます。
CAPTCHA機能の実装手順は以下の通りです。
- CAPTCHAキーを発行するリクエストを使って発行してもらいます。
- 発行されたCAPTCHAキーを利用してCAPTCHA イメージをリクエストし、発行してもらいます。
- ユーザーがイメージを見てから入力した値をCAPTCHAキーと比較します。
CAPTCHA APIにはCAPTCHAキーの発行/比較APIとCAPTCHA イメージリクエストAPIがあります。CAPTCHAキーの発行/比較APIは上記の1, 3番機能を提供し、CAPTCHA イメージリクエストAPIは2番機能を提供します。
リクエスト
- CAPTCHAキーの発行
curl "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=0" \
-H "X-NCP-APIGW-API-KEY-ID: {アプリケーションを登録する時に発行されたclient id値}" \
-H "X-NCP-APIGW-API-KEY: {アプリケーションを登録する時に発行されたclient secret値}" -v
- イメージファイルリクエスト
curl "https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=t521bp3qM7Qyk2X2&X-NCP-APIGW-API-KEY-ID={アプリケーションを登録する時に発行されたclient id値}" -v > image.jpg
- CAPTCHA入力値の比較
curl "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=1&key=eioDb7T8M703uht0&value=1PUNUST" \
-H "X-NCP-APIGW-API-KEY-ID: {アプリケーションを登録する時に発行されたclient id値}" \
-H "X-NCP-APIGW-API-KEY: {アプリケーションを登録する時に発行されたclient secret値}" -v
リクエストパラメータ
- CAPTCHAキーの発行
リクエスト変数名 | タイプ | 必須 | 基本値 | 説明 |
---|---|---|---|---|
code | integer | N | 0 | 0である場合はキー発行 (1である場合はキーと入力値の比較、省略時には0で動作) |
- イメージCAPTCHA ファイルリクエスト
リクエスト変数名 | タイプ | 必須 | 基本値 | 説明 |
---|---|---|---|---|
key | string | Y | - | CAPTCHAキー発行のAPI呼び出しを通じて受け取ったキーの値 |
- CAPTCHA入力値の比較
リクエスト変数名 | タイプ | 必須 | 基本値 | 説明 |
---|---|---|---|---|
code | integer | 0 | N | CAPTCHA キーと入力値の比較で動作するようにこの値を1に設定する必要有り、省略時には0(キーの発行)で動作 |
key | string | Y | - | CAPTCHAキー発行のAPI呼び出しを通じて受け取ったキーの値 |
value | string | Y | - | イメージCAPTCHAを見てユーザーが入力する値 |
リクエストヘッダ
- CAPTCHAキーの発行, CAPTCHA入力値の比較
ヘッダ名 | 説明 |
---|---|
X-NCP-APIGW-API-KEY-ID | アプリケーションを登録する時に発行されたClient IDX-NCP-APIGW-API-KEY-ID:{Client ID} |
X-NCP-APIGW-API-KEY | アプリケーションを登録する時に発行されたClient SecretX-NCP-APIGW-API-KEY:{Client Secret} |
レスポンス
レスポンスボディ
- CAPTCHAキー発行のリクエスト時
フィールド | タイプ | 説明 |
---|---|---|
key | string | CAPTCHAキー発行のAPI呼び出しを通じて受け取ったキーの値 |
- CAPTCHA イメージファイルのリクエスト時
JPGフォーマットのイメージデータ
- CAPTCHA入力値比較のリクエスト時
フィールド | タイプ | 説明 |
---|---|---|
result | boolean | 正解の場合はtrue、正解でない場合はfalse |
responseTime | string | 正解を当てるまでかかった時間、レスポンス範囲 -1 ~ 7200の間の値 |
例示
リクエスト例示
- CAPTCHAキーの発行
> GET /v1/captcha/nkey?code=0 HTTP/1.1
> Host: naveropenapi.apigw.ntruss.com
> User-Agent: curl/7.49.1
> Accept: */*
> X-NCP-APIGW-API-KEY-ID: {アプリケーションを登録する時に発行されたclient id値}
> X-NCP-APIGW-API-KEY: {アプリケーションを登録する時に発行されたclient secret値}
- イメージCAPTCHAファイルのリクエスト
> GET /v1/captcha-bin/ncaptcha.bin?key=t521bp3qM7Qyk2X2&X-NCP-APIGW-API-KEY-ID={アプリケーションを登録する時に発行されたclient id値} HTTP/1.1
> Host: naveropenapi.apigw.ntruss.com
> User-Agent: curl/7.49.1
> Accept: */*
- CAPTCHA入力値の比較
> GET /v1/captcha/nkey?code=1&key=eioDb7T8M703uht0&value=1PUNUST HTTP/1.1
> Host: naveropenapi.apigw.ntruss.com
> User-Agent: curl/7.49.1
> Accept: */*
> X-NCP-APIGW-API-KEY-ID: {アプリケーションを登録する時に発行されたclient id値}
> X-NCP-APIGW-API-KEY: {アプリケーションを登録する時に発行されたclient secret値}
レスポンス例示
- CAPTCHAキーの発行
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 04 Oct 2016 05:20:47 GMT
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 26
< Connection: keep-alive
< Keep-Alive: timeout=5
< Vary: Accept-Encoding
< Pragma: no-cache
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Cache-Control: no-cache
< Cache-Control: no-store
<
* Connection #0 to host naveropenapi.apigw.ntruss.com left intact
{"key":"t521bp3qM7Qyk2X2"}
- イメージCAPTCHAファイルのリクエスト
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 04 Oct 2016 05:21:24 GMT
< Content-Type: image/jpeg;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=5
< Pragma: no-cache
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Cache-Control: no-cache
< Cache-Control: no-store
- CAPTCHA入力値の比較
< HTTP/1.1 403 Forbidden
< Server: nginx
< Date: Tue, 04 Oct 2016 05:25:21 GMT
< Content-Type: application/json;charset=UTF-8
< Content-Length: 66
< Connection: keep-alive
< Keep-Alive: timeout=5
< Vary: Accept-Encoding
< Pragma: no-cache
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Cache-Control: no-cache
< Cache-Control: no-store
* Connection #0 to host naveropenapi.apigw.ntruss.com left intact
{"result":true,"responseTime":84.6}
API例題
Naver CAPTCHA APIの例題は 1) CAPTCHAキーの発行、2) CAPTCHAイメージ受信、3) CAPTCHA入力値比較の例題で構成されています。
// Naver CAPTCHA API例題 -キー発行
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class APIExamCaptchaNkey {
public static void main(String[] args) {
String clientId = "YOUR_CLIENT_ID";//アプリケーションclient secret値";
String clientSecret = "YOUR_CLIENT_SECRET";//アプリケーションclient secret値";
try {
String code = "0"; // キー発行時 0, CAPTCHAイメージ比較時には1でセット
String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code;
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 正常呼び出し
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // エラー発生
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
}
// Naver CAPTCHA API例題 - CAPTCHAイメージ受信
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
public class APIExamCaptchaImage {
public static void main(String[] args) {
String clientId = "YOUR_CLIENT_ID";//アプリケーションclient secret値";
try {
String key = "CAPTCHA_KEY"; // https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey 呼び出しを通じて受け取ったキーの値
String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=" + key + "&X-NCP-APIGW-API-KEY-ID" + clientId;
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 正常呼び出し
InputStream is = con.getInputStream();
int read = 0;
byte[] bytes = new byte[1024];
// ランダムな名称でファイル作成
String tempname = Long.valueOf(new Date().getTime()).toString();
File f = new File(tempname + ".jpg");
f.createNewFile();
OutputStream outputStream = new FileOutputStream(f);
while ((read =is.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
is.close();
} else { // エラー発生
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
// Naver CAPTCHA API例題 - 入力値比較
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class APIExamCaptchaNkeyResult {
public static void main(String[] args) {
String clientId = "YOUR_CLIENT_ID";//アプリケーションclient secret値";
String clientSecret = "YOUR_CLIENT_SECRET";//アプリケーションclient secret値";
try {
String code = "1"; // キー発行時 0, CAPTCHAイメージ比較時には1でセット
String key = "CAPTCHA_KEY"; // CAPTCHAキー発行時に受け取ったキーの値
String value = "USER_VALUE"; // ユーザーが入力したCAPTCHAイメージ文字値
String apiURL = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code +"&key="+ key + "&value="+ value;
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 正常呼び出し
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // エラー発生
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
}
<?php
// Naver CAPTCHA Open API例題 -キー発行
$client_id = "YOUR_CLIENT_ID";
$client_secret = "YOUR_CLIENT_SECRET";
$code = "0";
$url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=".$code;
$is_post = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = "X-NCP-APIGW-API-KEY-ID: ".$client_id;
$headers[] = "X-NCP-APIGW-API-KEY: ".$client_secret;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "status_code:".$status_code."<br />";
curl_close ($ch);
if($status_code == 200) {
echo $response;
} else {
echo "Error内容:".$response;
}
?>
// Naver CAPTCHA Open API例題 -イメージ受信
<?php
$client_id = "YOUR_CLIENT_ID";
$key = "CAPTCHA_KEY";
$url = "https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=".$key."&X-NCP-APIGW-API-KEY-ID=".$client_id;
$is_post = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "status_code:".$status_code."<br />";
curl_close ($ch);
if($status_code == 200) {
//echo $response;
$fp = fopen("captcha.jpg", "w+");
fwrite($fp, $response);
fclose($fp);
echo "<img src='captcha.jpg'>";
} else {
echo "Error内容:".$response;
}
?>
// Naver CAPTCHA Open API例題 - キー入力値比較
<?php
$client_id = "YOUR_CLIENT_ID";
$client_secret = "YOUR_CLIENT_SECRET";
$key = "CAPTCHA_KEY";
$code = "1";
$value = "USER_VALUE";
$url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=".$code."&key=".$key."&value=".$value;
$is_post = false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = "X-NCP-APIGW-API-KEY-ID: ".$client_id;
$headers[] = "X-NCP-APIGW-API-KEY: ".$client_secret;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "status_code:".$status_code."<br />";
curl_close ($ch);
if($status_code == 200) {
echo $response;
} else {
echo "Error内容:".$response;
}
?>
// Naver CAPTCHA API例題 -キー発行
var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var client_secret = 'YOUR_CLIENT_SECRET';
var code = "0";
app.get('/captcha/nkey', function (req, res) {
var api_url = 'https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=' + code;
var request = require('request');
var options = {
url: api_url,
headers: {'X-NCP-APIGW-API-KEY-ID':client_id, 'X-NCP-APIGW-API-KEY': client_secret}
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, {'Content-Type': 'text/json;charset=utf-8'});
res.end(body);
} else {
res.status(response.statusCode).end();
console.log('error = ' + response.statusCode);
}
});
});
app.listen(3000, function () {
console.log('http://127.0.0.1:3000/captcha/nkey app listening on port 3000!');
});
// Naver CAPTCHA API例題 -イメージ受信
var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var fs = require('fs');
app.get('/captcha/image', function (req, res) {
var api_url = 'https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=' + req.query.key + "&X-NCP-APIGW-API-KEY-ID=" + client_id;
var request = require('request');
var options = {
url: api_url
};
var writeStream = fs.createWriteStream('./captcha.jpg');
var _req = request.get(options).on('response', function(response) {
console.log(response.statusCode) // 200
console.log(response.headers['content-type'])
});
_req.pipe(writeStream); // fileに出力
_req.pipe(res); // ブラウザに出力
});
app.listen(3000, function () {
console.log('http://127.0.0.1:3000/captcha/image?key=CAPTCHA 키 app listening on port 3000!');
});
// Naver CAPTCHA Open API例題 - キー入力値比較
var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var client_secret = 'YOUR_CLIENT_SECRET';
var code = "1";
app.get('/captcha/result', function (req, res) {
var api_url = 'https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=' + code + '&key=' + req.query.key + '&value=' + req.query.value;
var request = require('request');
var options = {
url: api_url,
headers: {'X-NCP-APIGW-API-KEY-ID':client_id, 'X-NCP-APIGW-API-KEY': client_secret}
};
request.get(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, {'Content-Type': 'text/json;charset=utf-8'});
res.end(body);
} else {
res.status(response.statusCode).end();
console.log('error = ' + response.statusCode);
}
});
});
app.listen(3000, function () {
console.log('http://127.0.0.1:3000/captcha/result?key=CAPTCHA キー&value=CAPTCHA バリュー app listening on port 3000!');
})
# Python 3.4 バージョン例題です。
# Naver CAPTCHA API例題 -キー発行
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
code = "0"
url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code
request = urllib.request.Request(url)
request.add_header("X-NCP-APIGW-API-KEY-ID",client_id)
request.add_header("X-NCP-APIGW-API-KEY",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
# Naver CAPTCHA API例題 -イメージ受信
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
key = "YOUR_CAPTCHA_KEY" # CAPTCHA Key値
url = "https://naveropenapi.apigw.ntruss.com/captcha-bin/v1/ncaptcha?key=" + key + "&X-NCP-APIGW-API-KEY-ID=" + client_id;
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
print("CAPTCHA イメージ保存")
response_body = response.read()
with open('captcha.jpg', 'wb') as f:
f.write(response_body)
else:
print("Error Code:" + rescode)
# Naver CAPTCHA Open API例題 - キー入力値比較
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
code = "1"
key = "YOUR_CAPTCHA_KEY"
value = "YOUR_CAPTCHA_VALUE"
url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code + "&key=" + key + "&value=" + value
request = urllib.request.Request(url)
request.add_header("X-NCP-APIGW-API-KEY-ID",client_id)
request.add_header("X-NCP-APIGW-API-KEY",client_secret)
response = urllib.request.urlopen(request)
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
// Naver CAPTCHA API例題 -キー発行
using System;
using System.Net;
using System.Text;
using System.IO;
namespace NaverAPI_Guide
{
public class APIExamCaptchaNkey
{
static void Main(string[] args)
{
string code = "0"; // キー発行時 0, CAPTCHAイメージ比較時には1でセット
string url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-NCP-APIGW-API-KEY-ID", "YOUR-CLIENT-ID");
request.Headers.Add("X-NCP-APIGW-API-KEY", "YOUR-CLIENT-SECRET");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if(status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
else
{
Console.WriteLine("Error発生=" + status);
}
}
}
}
// Naver CAPTCHA API例題 -イメージ受信
using System;
using System.Net;
using System.Text;
using System.IO;
namespace NaverAPI_Guide
{
public class APIExamCaptchaImage
{
static void Main(string[] args)
{
string key = "KEY-INPUT"; // https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey 呼び出しを通じて受け取ったキーの値
string url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/ncaptcha?key=" + key + "&X-NCP-APIGW-API-KEY-ID=YOUR-CLIENT-ID";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
Console.WriteLine("status="+ status);
using (Stream output = File.OpenWrite("c:/captcha.jpg"))
using (Stream input = response.GetResponseStream())
{
input.CopyTo(output);
}
Console.WriteLine("c:/captcha.jpg was created");
}
}
}
// Naver CAPTCHA Open API例題 - キー入力値比較
using System;
using System.Net;
using System.Text;
using System.IO;
namespace NaverAPI_Guide
{
public class APIExamCaptchaNkeyResult
{
static void Main(string[] args)
{
string code = "1"; // キー発行時 0, CAPTCHAイメージ比較時には1でセット
string key = "KEY-INPUT"; // CAPTCHAキー発行時に受け取ったキーの値
string value = "VALUE-INPUT"; // ユーザーが入力したCAPTCHAイメージ文字値
string url = "https://naveropenapi.apigw.ntruss.com/captcha/v1/nkey?code=" + code + "&key=" + key + "&value=" + value;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-NCP-APIGW-API-KEY-ID", "YOUR-CLIENT-ID");
request.Headers.Add("X-NCP-APIGW-API-KEY", "YOUR-CLIENT-SECRET");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string status = response.StatusCode.ToString();
if(status == "OK")
{
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
else
{
Console.WriteLine("Error発生=" + status);
}
}
}
}
エラーコード
HttpStatusCode | ErrorCode | ErrorMessage |
---|---|---|
400 | CT002 | Unissued image(イメージ発行を行わない。) |
403 | CT001 | Invalid key (キーが満了されたか存在しないキー) |
500 | CT500 | System error |
この記事は役に立ちましたか?