API 요청
/rest/url_html요청 파라미터 1개 · 필수 1
url- 예시
https://apick.app
응답 필드 12개
datadata.search_result_pagedata.htmldata.illegal_scoredata.illegal_categorydata.successdata.errorapiapi.successapi.costapi.msapi.pl_id입력한 URL의 HTML을 추출합니다.
https://apick.app/rest/url_html왜 URL HTML 추출인가
페이지 하나 읽으려고 브라우저 환경을 직접 띄우고 관리하는 수고는 이제 그만. URL을 넣으면 해당 페이지의 HTML을 돌려줘 파싱과 분석에만 집중할 수 있습니다.
웹 페이지 주소를 보내면 그 페이지의 HTML 전체와 리디렉션을 거친 최종 주소, 불법·유해 사이트 가능성 점수를 돌려줍니다. 페이지 내용 분석, 메타 태그 확인, 변경 감시, 유해 사이트 선별에 씁니다.
추출에 성공하면 한 건당 5P가 차감됩니다. 실패하거나 시간이 초과되면 data.error로 응답하며 과금되지 않습니다.
http·https로 시작하는 공개 인터넷 주소만 받습니다. 사내망·사설 IP·localhost 주소와 로그인해야 보이는 페이지는 추출할 수 없습니다.
응답까지 길면 30초 가까이 걸립니다. 클라이언트 대기 시간은 60초 이상으로 두세요.
/rest/url_htmlurlhttps://apick.appdatadata.search_result_pagedata.htmldata.illegal_scoredata.illegal_categorydata.successdata.errorapiapi.successapi.costapi.msapi.pl_idPOST https://apick.app/rest/url_htmlAuthorization: Bearer — 내 계정의 API 인증키multipart/form-data상황별로 보내는 값과 응답에서 확인할 값을 모았습니다. 언어 탭에서 그대로 복사해 쓸 수 있습니다.
페이지의 메타 태그·본문을 분석할 때 HTML 전체를 받습니다.
/rest/url_htmlcurl --fail-with-body --request POST 'https://apick.app/rest/url_html' \
--header "Authorization: Bearer $APICK_API_KEY" \
--form-string 'url=https://apick.app'const form = new FormData();
form.append("url", "https://apick.app");
const response = await fetch("https://apick.app/rest/url_html", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
body: form,
signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);import os
import requests
parts = [
("url", (None, "https://apick.app")),
]
response = requests.request("POST", "https://apick.app/rest/url_html",
headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
files=parts,
timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
'url' => 'https://apick.app',
];
$curl = curl_init('https://apick.app/rest/url_html');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $form,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);data.html이 HTML 전체이고, data.search_result_page가 리디렉션 뒤 최종 주소입니다.data.success가 3이며 과금되지 않습니다.신고된 링크가 불법·유해 사이트인지 1차로 걸러 낼 때 씁니다.
/rest/url_htmlcurl --fail-with-body --request POST 'https://apick.app/rest/url_html' \
--header "Authorization: Bearer $APICK_API_KEY" \
--form-string 'url=https://example.com/promo'const form = new FormData();
form.append("url", "https://example.com/promo");
const response = await fetch("https://apick.app/rest/url_html", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
body: form,
signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);import os
import requests
parts = [
("url", (None, "https://example.com/promo")),
]
response = requests.request("POST", "https://apick.app/rest/url_html",
headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
files=parts,
timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
'url' => 'https://example.com/promo',
];
$curl = curl_init('https://apick.app/rest/url_html');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $form,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);data.illegal_score(0~100)가 기준값 이상이면 검토 대상으로 표시합니다.data.illegal_category가 있으면 범주(adult·gambling·piracy 등)를 함께 기록합니다.HTTP 성공과 업무 결과를 구분하세요. 경로별 응답 필드와 예시는 위 요청과 응답에 함께 있습니다.
{
"data": {
"search_result_page": "https://apick.app/",
"html": "<!DOCTYPE html><html lang=\"ko\"><head><meta charset=\"utf-8\"><title>에이픽</title></head><body>…</body></html>",
"illegal_score": 2,
"illegal_category": "none",
"success": 1
},
"api": { "success": true, "cost": 5, "ms": 4551, "pl_id": 3022117 }
}
유해 사이트를 걸러 낼 때는 illegal_score가 일정 값(예: 70) 이상인지로 판단하고, 범주가 필요하면 illegal_category를 함께 보세요. 이 점수만으로 결제·삭제처럼 되돌릴 수 없는 처리를 하지 말고 사람이 확인하는 단계를 두세요.
url과 다릅니다.adult·gambling·piracy·drugs·fraud·other_crime, 해당 없으면 none입니다. 응답에 없을 수도 있으니 없으면 illegal_score만으로 판단하세요.응답을 아래 순서로 확인하세요. 결과 유무와 과금 여부는 서로 다릅니다.
data.error(사유 문구)와 data.success=0을 돌려줍니다. HTTP 상태는 사유에 따라 400·404·408·424 중 하나입니다.api.cost는 0이며 과금되지 않습니다. data.error 문구를 그대로 기록하고 사용자에게 보여 주세요.{
"data": {
"error": "입력값을 확인해 주세요.",
"success": 0
},
"api": {
"success": true,
"cost": 0,
"ms": 5
}
}url을 채워 다시 요청합니다.http·https가 아니거나, 공개 인터넷 주소가 아니거나, 페이지가 열리지 않은 경우입니다. 브라우저에서 주소가 열리는지 확인한 뒤 다시 요청합니다.data.success가 3입니다. 잠시 뒤 다시 요청합니다.오류 응답은 모두 api.cost가 0이며 과금되지 않습니다.
FORM_DATA_INVALIDFORM_DATA_FIELD_CONFLICTMULTIPART_LIMIT_OR_PARSE_ERROR실제 차감 금액은 응답의 api.cost로 확인하세요. 상세 요금은 요금정책에서 볼 수 있습니다.