Ben Ben Blog.

網絡爬蟲 - Cloudflare worker 免費proxy list

動機

最近需要用puppeteer去爬比賽的賽果,要爬每個參考者的分數。剛開始是可以成功拿到資料,但在幾分鐘後就會開始失敗回傳錯誤,那應該是ip被block了,所以就尋找有沒有免費的proxy server(窮)。找過一些說提供免費proxy的網站,但大多都很快就失效。後來找到cloudflare worker服務,Cloudflare Workers 是由 Cloudflare 提供的一種serverless無伺服器計算平台,允許開發者在其全球分佈的邊緣網路上運行代碼。這項技術使得開發者能夠在接近用戶的位置執行代碼,從而顯著降低延遲並提高應用性能。 而Cloudflare 一直都是佛心公司,提供很多免費的資源,Cloudflare workers 免費plan就提供每日100,000要求數。

Coding

這邊是基本的程式,發送請求需要在url param提供proxyUrl

export default {
	async fetch(request, env, ctx) {
		const url = new URL(request.url);

		const proxyUrl = url.searchParams.get('proxyUrl'); // get a query param value (?proxyUrl=...)
		const modify = url.searchParams.has('modify'); // check if a query param is set (?proxyUrl=...&modify)

		if (!proxyUrl) {
			return new Response('Bad request: Missing `proxyUrl` query param', { status: 400 });
		}

		// make subrequests with the global `fetch()` function
		let res = await fetch(proxyUrl, request);

		// optionally, modify the respone
		if (modify) {
			res = new Response(res.body, res);
			res.headers.set('X-My-Header', 'My Header Value');
		}

		return res;
	},
};

我把deploy的script上傳到了github連結

需要安裝cloudflare wrangler 安裝教學

然後修改wrangler.toml裡面的name就可以用wrangler命令進行部署

wrangler deploy

也可以用我建立好的npm script

yarn deploy

小提示

因為只有一個worker ip可能沒改變的那麼快,所以我用上面的script建立了worker1-worker10,透過隨機發送給不同的worker來達成轉ip的要求。