我想用 Cloudflare 的 Workers 实现一个 API ,输入参数是一个 URL ,输出这个 URL 对应页面上的所有链接 URL 。 请帮我实现代码。
当然可以!Cloudflare Workers 是一个强大的平台,可以用来构建各种类型的 API。你可以使用 JavaScript 来实现这个功能。以下是一个简单的示例代码,它会接受一个 URL 作为输入,并返回该页面上所有链接的 URL。
首先,你需要在 Cloudflare Workers 中创建一个新的 Worker,然后将以下代码粘贴到你的 Worker 脚本中:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const { searchParams } = new URL(request.url)
const targetUrl = searchParams.get('url')
if (!targetUrl) {
return new Response('URL parameter is required', { status: 400 })
}
try {
const response = await fetch(targetUrl)
const html = await response.text()
const links = extractLinks(html, targetUrl)
return new Response(JSON.stringify(links), {
headers: { 'Content-Type': 'application/json' }
})
} catch (error) {
return new Response('Error fetching the URL', { status: 500 })
}
}
function extractLinks(html, baseUrl) {
const parser = new DOMParser()
const doc = parser.parseFromString(html, 'text/html')
const linkElements = doc.querySelectorAll('a')
const links = []
linkElements.forEach(link => {
let href = link.getAttribute('href')
if (href) {
// Resolve relative URLs
href = new URL(href, baseUrl).href
links.push(href)
}
})
return links
}
addEventListener('fetch', event => { ... })
用于监听传入的 HTTP 请求。handleRequest
函数处理���入的请求,提取 URL 参数,并尝试获取该 URL 的内容。extractLinks
函数使用 DOMParser
解析 HTML 文本,并提取所有 <a>
标签的 href
属性。https://your-worker-url.example.com/?url=https://example.com
这样,Worker 会返回 https://example.com
页面上所有链接的 URL。
希望这个示例对你有帮助!如果你有任何问题或需要进一步的帮助,请随时