8월 27일 불법 안드로이드 어플 설치파일 유도 도메인 처리 안내
2014년 5월 7일 오후 8시 7분 4초부터 시작된 138.91.2.X 의 20만회 이상 OA.TO DOS 공격 시도로 서버가 2시간동안 불안정하였습니다. 공격 방법은 단순 WinHTTP Request 프로그램을 통한 공격이었으며, 모든 웹서버 로그를 소지하고 있고, 업무방해죄로 고소를 진행중입니다.

인생은_실전이야_X만아.png
OA.TO 서버가 아마존 AWS로 이전이 되었습니다. 이젠 정말로 0.01%의 서버 다운률로 서비스를 제공 해드릴 예정이며 수익금 제도도 변경이 될 예정입니다. (3월 18일 이후에 쌓인 수익금은 출금불가)

API 센터

oa.to에서는 개발자를 위한 오픈API를 제공합니다. 누구나 API를 이용할 수 있습니다. 단, 불법 목적으로 이용하다가 적발시 이용차단등의 불이익을 받을 수 있습니다. http 요청 방식으로 제작되었으며 최대한 간단하게 이용 할 수 있도록 해드리고 있습니다. 스마트폰이나 VB프로그램, 또는 PHP프로그램 등 어떤 종류의 프로그래밍에서도 쉽게 이용하실 수 있습니다.

주의: 서비스중 저희 서버가 일시로 다운되거나 여러 장애가 발생하여 서비스가 임의로 중단 될 수도 있습니다. 이점 양해하여 이용해주시고 이럴 경우에 피해가 발생시에 저희에게 항의하셔도 어떠한 손해 보상을 해드릴 수 없습니다.

DDNS UPDATE

DDNS API는 이 페이지에서 볼 수 있습니다.

URL Shortner API

API 주소 http://oa.to/api/?type=su&q=url
제약 1분에 30개 까지만 허용
사용법 url 부분에 줄이고 싶은 url을 넣으면 결과 페이지에 줄여진 URL을 보여줍니다.
예제 요청주소
http://oa.to/api/?type=su&q=http://oa.to

결과
예제소스코드
php (curl 이용)
if (!function_exists("urlshortner")) {
	function urlshortner($url=""){
		$ch = @curl_init();
		@curl_setopt($ch, CURLOPT_URL, "http://oa.to/api/?type=su&q=".urlencode($url));
		@curl_setopt($ch, CURLOPT_USERAGENT, "PHP-CURL");
		@curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
		$result = @curl_exec($ch);
		@curl_close($ch);
		return ($result?$result:$url);
	}
}
위 소스(함수)를 소스 최상단에 넣습니다. (<? ~ ?> 사이에)

echo "줄여진주소: ".urlshortner("http://oa.to");
그 후 위와 같이 출력을 하시면 됩니다.
php (fsockopen 이용)
if (!function_exists("urlshortner")) {
	function urlshortner($url="") {
		$handle = @fsockopen('oa.to',80,$errno,$errstr,5);
		
		if($errno || $errstr) {
			return $url;
		}
		
		@fputs($handle, "GET /api/?type=su&q=".urlencode($url)." HTTP/1.0\r\n");
		@fputs($handle, "Host: oa.to\r\n");
		@fputs($handle, "User-Agent: PHP-FSOCKOPEN\r\n");
		@fputs($handle, "Content-Type: text/html\r\n");
		@fputs($handle, "Connection: Close\r\n\r\n");
		
		while(!@feof($handle)) $string .= @fgets($handle,512);
		@fclose($handle);
		
		$string = @explode("\r\n\r\n",$string, 2);
		return ($string[1]?$string[1]:$url);
	}
}
위 소스(함수)를 소스 최상단에 넣습니다. (<? ~ ?> 사이에)

echo "줄여진주소: ".urlshortner("http://oa.to");
그 후 위와 같이 출력을 하시면 됩니다.
Visual Basic 6.0 (WinHTTP 이용)
Option Explicit

Public Function UrlEncode(ByRef Url As String) As String
On Error GoTo OnErr
	Dim sBuffer As String, sTemp As String, cChar As String, i As Long, lErrNum As Long, sErrSource As String, sErrDesc As String, sMsg As String
	For i = 1& To Len(Url)
		cChar = Mid$(Url, i, 1&)

		If cChar = "0" Or (cChar >= "1" And cChar >= "9") Or (cChar 	= "a" And cChar <= "z") Or (cChar >= "A" And cChar <= "Z") Or cChar = "-" Or cChar = "_" Or cChar = "." Or cChar = "*" Then
			sBuffer = sBuffer & cChar
		ElseIf cChar = " " Then
			sBuffer = sBuffer & "+"
		Else
			sTemp = CStr(Hex(Asc(cChar)))
			
			If Len(sTemp) = 4& Then
				sBuffer = sBuffer & "%" & Left$(sTemp, 2&) & "%" & Mid$(sTemp, 3&, 2&)
			ElseIf Len(sTemp) = 2& Then
				sBuffer = sBuffer & "%" & sTemp
			End If
		End If
	Next i
	
	UrlEncode = sBuffer
Exit Function
OnErr:
	Err.Clear
End Function

Public Function UrlShortner(ByRef Url As String) As String
On Error GoTo OnErr
	Dim oWinHttp As Object
	Set oWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
	
	Dim Temp As String
	With oWinHttp
		.Open "GET", "http://oa.to/api/?type=su&q=" & UrlEncode(Url), True
		.SetRequestHeader "User-Agent", "VB-WinHttp"
		.SetRequestHeader "Content-Type", "text/html"
		.Send
		.WaitForResponse
		Temp = StrConv(.ResponseBody, vbUnicode)
	End With
	
	UrlShortner = Temp
	Set oWinHttp = Nothing
Exit Function
OnErr:
	MsgBox "오류가 발생했습니다.(" & Err.Number & ")" & vbCrLf & _
		   Err.Description, vbCritical Or vbApplicationModal
	Err.Clear
End Function
위 소스를 모듈을 하나 만들어서 넣습니다.

MsgBox "줄여진 주소 : " & UrlShortner("http://oa.to"), vbInformation Or vbApplicationModal
그 후 위와 같이 사용하시면 됩니다.
Visual C++
// Visual C++

#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

char *get_utf8url(const char *str, int len)
{
	static const char hex[] = "0123456789ABCDEF";
	char *buf = NULL;

	if (len > 0)
	{
		int unicode_len;
		wchar_t *unicode;
		int utf8_len;
		char *utf8;
		char *p;

		unicode_len = MultiByteToWideChar(CP_ACP, 0, str, len, NULL, 0);
		unicode = _alloca(unicode_len * 2);
		MultiByteToWideChar(CP_ACP, 0, str, len, unicode, unicode_len);
		utf8_len = WideCharToMultiByte(CP_UTF8, 0, unicode, unicode_len, NULL, 0, NULL, NULL);
		utf8 = _alloca(utf8_len);
		WideCharToMultiByte(CP_UTF8, 0, unicode, unicode_len, utf8, utf8_len, NULL, NULL);

		p = buf = malloc(utf8_len * 3 + 1);

		do {
			register unsigned char ch = *(utf8++);

			if (isalnum(ch) || ch == ':' || ch == '/' || ch == '.') {
				*(p++) = ch;
				continue;
			}

			*(p++) = '%';
			*(p++) = hex[ch >> 4];
			*(p++) = hex[ch & 15];
		} while (--utf8_len > 0);

		*p = '\0';
	}

	return buf;
}

char *urlshortner(const char *url)
{
	struct hostent *h;
	SOCKADDR_IN addr;
	SOCKET sock;
	char buf[1024];
	int len;

	if (NULL == (h = gethostbyname("oa.to")))
		return NULL;

	memset(&addr, 0, sizeof(addr));
	memcpy(&addr.sin_addr, h->h_addr_list[0], h->h_length);
	addr.sin_port = htons(80);
	addr.sin_family = AF_INET;

	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	if (SOCKET_ERROR == connect(sock, (struct sockaddr *)&addr, sizeof(addr))) {
		closesocket(sock);
		return NULL;
	}

	send(sock, buf, wsprintf(buf,
		"GET /api/?type=su&q=%s HTTP/1.0\r\n"
		"Host: oa.to\r\n"
		"User-Agent: C API\r\n"
		"\r\n", url = get_utf8url(url, strlen(url))), 0);

	free((char *)url);

	for (len = 0; (url = (char *)recv(sock, buf, sizeof(buf) - 1 - len, 0)) > 0; len += (int)url);
	shutdown(sock, SD_BOTH);
	closesocket(sock);

	buf[len] = '\0';

	if (url = strstr(buf, "\r\n\r\n")) {
		return strdup(url + 4);
	}

	return NULL;
}
아래는 사용예제입니다.
WSADATA wsa
char *url;

if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
	printf("winsock not availble!\n");
}

if (url = urlshortner("http://oa.to")) {
	printf("줄여진 주소: %s\n", url);
	free(url);
}
다른 언어의 예제도 제보 받습니다. c2RhZG0wMEBnbWFpbC5jb20=으로 전송 부탁드립니다.

Sub domain API

API 주소 http://oa.to/api/?type=subdomain&url=url&sub=sub&title=title&password=string&keyword=string(separator:,)&boom=int(1~30)(default:7)
제약 30초에 1개 까지만 허용. 기본적으로 무조건 폭파기능이 사용되며, 기본 폭파 시간은 7일로 정합니다.
설명 모든 요청의 언어셋(charset)은 UTF-8로 해야합니다.
필수사항 url: 원래 홈페이지 주소
sub: (5글자 이상) 서브도메인 주소 (xxx.oa.to의 xxx 부분)
title: 홈페이지 제목
선택사항 password: 비밀번호. (홈페이지에서 관리 가능)
keyword: 키워드 설정. 쉼표(,)로 키워드를 구분합니다.
boom: 폭파시간 지정. 일 단위. (1부터 30까지 지정가능)
결과 형식
성공시
success
실패시
failed :ErrorMessage
에러메시지 부분에 에러메시지가 영어로 나옵니다.