Categorygithub.com/HaliComing/fpp
modulepackage
0.0.0-20220402082506-5a8df1712ead
Repository: https://github.com/halicoming/fpp.git
Documentation: pkg.go.dev

# README

fpp (free proxy pool)免费代理池

介绍

这是一个基于Golang开发的免费HTTP代理池。定时采集网上发布的免费代理验证并入库,同时你也可以在extractors下扩展代码来增加代理IP池的数量。

新特性与未来规划

(最近在忙其他项目,此暂停维护一段时间,有能力可以clone仓库改改,欢迎Pr呦~2022/04/02) 比较仓促,代码未优化

  • 抓取校验:自动抓取公开代理网站并校验入库
  • 集成代理自动切换IP(实验):其他需要代理IP的项目再也不用主动维护代理池啦,所有请求设置这个fpp代理池的代理服务器后,fpp会自动为每个请求随机切换IP。让您倾注于数据业务的开发。
  • 全球IP扫描模块:自动扫描可用代理并验证入库
  • 付费代理集成或自有代理导入:在自动切换IP的基础上集成付费代理或导入自有代理,美滋滋,需要使用代理的程序只需要请求时设置fpp的代理后就可以直接使用高可用的代理了。

下载与运行

下载

前往https://github.com/HaliComing/fpp/releases,下载适用于您目标机器操作系统、CPU架构的主程序,解压直接运行即可。

运行

# 解压程序包
tar -zxvf fpp_VERSION_OS_ARCH.tar.gz

# 赋予执行权限
chmod +x ./fpp

# 启动 fpp
./fpp

配置

首次直接运行会生成conf.ini配置文件,首次请勿自己创建。

[System]
; 是否Debug运行,默认false
; Debug = false
; api的HTTP监听端口,默认9826
Listen = :9826
; 代理服务器的HTTP监听端口,默认9827。建议关闭此端口的防火墙。
ProxyListen = :9827
; 检测线程数,默认50
NumberOfThreads = 70
; Token 默认会随机生成
Token = STO64ysaLOte9J732YF1aw1Gf17xsnTV
; IP提取时间间隔,单位分钟,默认60
ExtractionInterval = 45
; 检测时间间隔,单位分钟,默认15
CheckInterval = 10

[Database]
; 数据库类型,支持memory和sqlite3,默认sqlite3
; 由于memory类型会导致no such table,暂时不推荐,如果您能解决欢迎issue讨论。
Type = sqlite3
; Type为sqlite3时启用此字段,数据库名称
DBFile = fpp.db

[SSL]
; api的HTTPS监听端口
Listen = :443
; 证书位置
CertPath = cert
; key位置
KeyPath = key

接口

简单的接口文档,详情请运行fpp后打开/即可查看。例如:http://localhost:9826/

apimethodDescription
/GETapi介绍和文档
/api/v1/site/pingGET服务连通测试
/api/v1/site/countGET统计接口
/api/v1/proxy/randomGET随机获取一个IP接口
/api/v1/proxy/allGET分页查询全部IP的接口
/api/v1/proxy/deleteGET删除指定IP

构建

自行构建前需要拥有 Go >= 1.13 必要依赖。

克隆代码

git clone https://github.com/HaliComing/fpp.git

嵌入静态资源

# 回到项目主目录
# 将静态资源copy在assets/build/目录下

# 安装 statik, 用于嵌入静态资源
go get github.com/rakyll/statik

# 开始嵌入
statik -src=assets/build/  -include=*.html,*.ico,*.icon -f

编译项目

您可以选择在Releases界面下载已编译好的二进制文件。手动编译如下:

# 开始编译
# 必须开启CGO_ENABLED
SET CGO_ENABLED=1

go build -a -o fpp.exe -ldflags "-s"

提取器目录

不分先后顺序,如果您有更好的代理网站欢迎提交issue

代理名称代理网址提取器包名
齐云代理www.7yip.cnyip7
66免费代理www.66ip.cnip66
89免费代理www.89ip.cnip89
全网代理IPwww.goubanjia.comgoubanjia
IP3366云代理www.ip3366.netip3366
高可用全球免费代理IP库ip.jiangxianli.comjiangxianli
快代理www.kuaidaili.comkuaidaili
ProxyList+list.proxylistplus.comproxylistplus
方法SEO代理seofangfa.comseofangfa
速代理www.sudaili.comsudaili
西拉免费代理IPwww.xiladaili.comxiladaili

添加自定义提取器

首先download代码后,在extractors文件夹中创建需要抓取的代理网站文件夹和go文件,并实现Extract接口,以下以example.com举例。

目录
extractors  #提取器文件夹
|--example  #示例提取器
|--|--example.go  #示例提取器代码
|--|--example_test.go #示例提取器测试代码
|--extractors.go #提取者

example.go,只需要修改Key接口和Extract接口即可。

package example

import (
	"github.com/HaliComing/fpp/extractors/types"
	"github.com/HaliComing/fpp/models"
	"github.com/HaliComing/fpp/pkg/request"
	"github.com/PuerkitoBio/goquery"
	"net/http"
	"regexp"
	"strings"
)

type extractor struct{}

// New returns a extractor. 
func New() types.Extractor {
	return &extractor{}
}

// 修改此方法
func (e *extractor) Key() string {
    // 改为代理网站的域名,不带http前缀
	return "www.example.com"
}

// Extract is the main function to extract the data.
func (e *extractor) Extract() ([]*models.ProxyIP, error) {
	var proxyIPs []*models.ProxyIP
	// 抓取数据的代码,可参考其他提取器代码,代码很简陋,有更好的可以提issue或pr
    // ...
    // proxyIP := &models.ProxyIP{
	//		IP:   ip, //只需要填充IP和Port,其他勿填
	//		Port: port,//只需要填充IP和Port,其他勿填
	//	}
    //proxyIPs = append(proxyIPs, proxyIP)
	return proxyIPs, nil
}

example_test.go别忘了测试类,如无其他情况测试类无需改动。

package example

import (
	"fmt"
	"testing"
)

// 测试提取
func TestExtract(t *testing.T) {
	extract, err := New().Extract()
	if err != nil {
		fmt.Println(err)
	} else {
		for _, ip := range extract {
            // 打印出提取出来的代理
			fmt.Printf("%s:%s\n", ip.IP, ip.Port)
		}
	}
}

extractors.goinit方法添加示例提取器。

func init() {
	extractors = []types.Extractor{
		yip7.New(),
		ip66.New(),
		ip89.New(),
		goubanjia.New(),
		ip3366.New(),
		jiangxianli.New(),
		kuaidaili.New(),
		proxylistplus.New(),
		seofangfa.New(),
		sudaili.New(),
		xiladaili.New(),
		example.New(),// 添加示例提取器,注意后面的逗号
	}
}

代理服务自动切换IP(实验)

这是一个模拟请求的python脚本。api.ipify.org是一个获取本机IP地址的接口,使用代理池的代理服务器请求会为每次请求随机切换代理IP。

import requests

def test():
    rsp = requests.get("http://api.ipify.org/",proxies={"http": "localhost:9827"})
    return rsp.text

print(test())
print(test())
print(test())

终端执行后结果如下。可以看到每次请求返回结果都会显示不同的IP地址。

>$ python main.py
223.96.90.216
151.106.18.124
120.133.231.92

>$ 

最后

  • 首先感谢您的使用,如果喜欢本程序,不妨给个star
  • 若您发现bug或者建议,欢迎提交issue
  • 若您愿意贡献代码那就更棒啦,欢迎提交Pr

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author