736 lines
23 KiB
Markdown
736 lines
23 KiB
Markdown
# 针对kongfz.dll文件使用教程
|
||
## 1.需要先创建dll工具实例
|
||
|
||
### 1. 加载DLL,用于调用dll文件,代码示例:
|
||
```go
|
||
func main(){
|
||
// 加载DLL
|
||
manager, err := NewDLLManager("main.dll")
|
||
if err != nil {
|
||
log.Fatalf("初始化DLL管理器失败: %v", err)
|
||
}
|
||
// 确保字段被释放,但是需要注意,如果加这个,可能把你的dll文件释放掉了,导致程序崩溃
|
||
defer manager.Close()
|
||
}
|
||
|
||
|
||
type DLLManager struct {
|
||
dll *syscall.DLL
|
||
}
|
||
|
||
func NewDLLManager(dllPath string) (*DLLManager, error) {
|
||
dll, err := syscall.LoadDLL(dllPath)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("加载DLL失败: %v", err)
|
||
}
|
||
return &DLLManager{dll: dll}, nil
|
||
}
|
||
|
||
func (m *DLLManager) Close() {
|
||
if m.dll != nil {
|
||
m.dll.Release()
|
||
}
|
||
}
|
||
func (m *DLLManager) Initialize(configJSON string) (string, error) {
|
||
return m.callFunction("Initialize", configJSON)
|
||
}
|
||
|
||
// 修改后的 GetKFZGTImageURL - 需要5个参数
|
||
func (m *DLLManager) GetKFZGTImageURL(proxyType, username, password, machineCode, isbn string) (string, error) {
|
||
return m.callFunctionFiveArgs("GetKFZGTImageURL",
|
||
proxyType, username, password, machineCode, isbn)
|
||
}
|
||
|
||
// 修改后的 GetKFZSPTImageURL - 需要5个参数
|
||
func (m *DLLManager) GetKFZSPTImageURL(proxyType, username, password, machineCode, isbn string) (string, error) {
|
||
return m.callFunctionFiveArgs("GetKFZSPTImageURL",
|
||
proxyType, username, password, machineCode, isbn)
|
||
}
|
||
|
||
// 修改后的 GetKFZShopBookInfo - 需要12个参数
|
||
func (m *DLLManager) GetKFZShopBookInfo(proxyType, username, password, machineCode, shopId, isImage, bookNum, pageNum, sortType, sort, priceDown, priceUp string) (string, error) {
|
||
return m.callFunctionTwelveArgs("GetKFZShopBookInfo",
|
||
proxyType, username, password, machineCode, shopId, isImage, bookNum, pageNum, sortType, sort, priceDown, priceUp)
|
||
}
|
||
```
|
||
|
||
### 2.初始化配置信息,代码示例:
|
||
````go
|
||
func main(){
|
||
// 使用默认配置初始化
|
||
config := createDefaultConfig()
|
||
configJSON, err := json.Marshal(config)
|
||
if err != nil {
|
||
log.Fatalf("序列化配置失败: %v", err)
|
||
}
|
||
|
||
result, err := manager.Initialize(string(configJSON))
|
||
if err != nil {
|
||
log.Fatalf("初始化失败: %v", err)
|
||
}
|
||
|
||
var initResp APIResponses
|
||
if err := json.Unmarshal([]byte(result), &initResp); err != nil {
|
||
log.Fatalf("解析初始化响应失败: %v", err)
|
||
}
|
||
|
||
if !initResp.Success {
|
||
log.Fatalf("初始化失败: %s", initResp.Message)
|
||
}
|
||
}
|
||
// 创建默认配置示例
|
||
func createDefaultConfig() Configs {
|
||
var configs Configs
|
||
|
||
// App配置
|
||
configs.App.MaxRetryTimes = 3
|
||
configs.App.RateLimitDelay = 1000
|
||
configs.App.Size = 10
|
||
configs.App.DefaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
|
||
|
||
// API配置
|
||
configs.API.LoginURL = "https://login.kongfz.com/Pc/Login/account"
|
||
configs.API.BookSearchURL = "https://search.kongfz.com/pc-gw/search-web/client/pc/bookLib/keyword/list"
|
||
configs.API.ProductSearchURL = "https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/list"
|
||
|
||
// 代理配置(需要根据实际情况修改)
|
||
configs.Proxy.Servers = "http-dynamic.xiaoxiangdaili.com,http-dynamic-S02.xiaoxiangdaili.com,http-dynamic-S03.xiaoxiangdaili.com,http-dynamic-S04.xiaoxiangdaili.com"
|
||
configs.Proxy.Username = "1297757178467602432"
|
||
configs.Proxy.Password = "QgQBvP7f"
|
||
configs.Proxy.TailMachineCode = "b7bf22a237ec692f13fcc2c43ee63252"
|
||
configs.Proxy.TailCardKey = "DL_20_YK_1920acb2129844c2aabade3896560a9b"
|
||
configs.Proxy.ProxyFilePath = "dll/proxyConfig.dll"
|
||
|
||
return configs
|
||
}
|
||
|
||
// 配置结构
|
||
type Configs struct {
|
||
App struct {
|
||
MaxRetryTimes int `json:"max_retry_times"`
|
||
RateLimitDelay int `json:"rate_limit_delay"`
|
||
Size int `json:"size"`
|
||
DefaultUserAgent string `json:"default_user_agent"`
|
||
} `json:"app"`
|
||
|
||
API struct {
|
||
LoginURL string `json:"login_url"`
|
||
BookSearchURL string `json:"book_search_url"`
|
||
ProductSearchURL string `json:"product_search_url"`
|
||
} `json:"api"`
|
||
|
||
Proxy struct {
|
||
Servers string `json:"servers"`
|
||
Username string `json:"username"`
|
||
Password string `json:"password"`
|
||
TailMachineCode string `json:"tail_machine_code"`
|
||
TailCardKey string `json:"tail_card_key"`
|
||
ProxyFilePath string `json:"proxy_file_path"`
|
||
} `json:"proxy"`
|
||
}
|
||
````
|
||
|
||
### 直接调用接口,代码示例:入参、返回参数都在下面
|
||
```go
|
||
func main() {
|
||
// 调用方法示例
|
||
shopResult, err := manager.GetKFZShopBookInfo(
|
||
proxyType, username, password, machineCode,
|
||
shopId, isImage, bookNum, pageNum, sortType, sort, priceDown, priceUp,
|
||
)
|
||
}
|
||
```
|
||
|
||
---
|
||
## 接口详情
|
||
|
||
### 1. 获取孔网官图
|
||
|
||
**请求信息**
|
||
|
||
gtResult, err := manager.GetKFZGTImageURL(testCase.isbn)
|
||
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|------|--------|----|-----------|
|
||
| proxyType | string | 是 | 代理类型(小象代理:CALF_ELEPHANT_PROXY,内置代理:TAIL_PROXY) |
|
||
| username | string | 是 | 小象代理账号 |
|
||
| password | string | 是 | 小象代理密码 |
|
||
| machineCode | string | 是 | 内置代理机械码 |
|
||
| isbn | string | 是 | 图书的 ISBN 号 |
|
||
|
||
**响应数据**
|
||
|
||
| 字段名 | 类型 | 说明 | 示例值 |
|
||
|--------|------|------|---------|
|
||
| `success` | boolean | 请求是否成功 | `true` |
|
||
| `message` | string | 响应消息 | `"查询成功"` |
|
||
| `data` | array | 图书信息列表 | - |
|
||
|
||
**图书信息字段说明(data数据)**
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| `author` | string | 作者 |
|
||
| `binding_layout` | string | 装帧布局 |
|
||
| `book_name` | string | 图书名称 |
|
||
| `book_pic` | string | 图书图片(大图) |
|
||
| `book_pic_s` | string | 图书图片(小图) |
|
||
| `buyCount` | string | 购买数量 |
|
||
| `category` | string | 分类 |
|
||
| `condition` | string | 图书状况 |
|
||
| `content` | string | 内容简介 |
|
||
| `edition` | string | 版次 |
|
||
| `editor` | string | 编者 |
|
||
| `express_delivery_fee` | string | 快递费用 |
|
||
| `fix_price` | string | 定价 |
|
||
| `format` | string | 开本 |
|
||
| `isbn` | string | ISBN号 |
|
||
| `item_id` | number | 商品ID |
|
||
| `languages` | string | 语言 |
|
||
| `mid` | number | 商家ID |
|
||
| `pages` | string | 页数 |
|
||
| `paper` | string | 纸张 |
|
||
| `print_time` | string | 印刷时间 |
|
||
| `publication_time` | number | 出版时间(时间戳) |
|
||
| `publisher` | string | 出版社 |
|
||
| `sellCount` | string | 销售数量 |
|
||
| `shop_id` | number | 店铺ID |
|
||
| `wordage` | string | 字数 |
|
||
|
||
**响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "查询成功",
|
||
"data": {
|
||
"author": "",
|
||
"binding_layout": "",
|
||
"book_name": "",
|
||
"book_pic": "",
|
||
"book_pic_s": "",
|
||
"buyCount": "",
|
||
"category": "",
|
||
"condition": "",
|
||
"content": "",
|
||
"edition": "",
|
||
"editor": "",
|
||
"express_delivery_fee": "",
|
||
"fix_price": "",
|
||
"format": "",
|
||
"isbn": "",
|
||
"item_id": 0,
|
||
"languages": "",
|
||
"mid": 0,
|
||
"pages": "",
|
||
"paper": "",
|
||
"print_time": "",
|
||
"publication_time": 0,
|
||
"publisher": "",
|
||
"sellCount": "",
|
||
"shop_id": 0,
|
||
"wordage": ""
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 获取孔网实拍图
|
||
|
||
**请求信息**
|
||
|
||
sptResult, err := manager.GetKFZSPTImageURL(testCase.isbn)
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|------|--------|----|------------|
|
||
| proxyType | string | 是 | 代理类型(小象代理:CALF_ELEPHANT_PROXY,内置代理:TAIL_PROXY) |
|
||
| username | string | 是 | 小象代理账号 |
|
||
| password | string | 是 | 小象代理密码 |
|
||
| machineCode | string | 是 | 内置代理机械码 |
|
||
| isbn | string | 是 | 图书的 ISBN 号 |
|
||
|
||
**响应数据**
|
||
|
||
| 字段名 | 类型 | 说明 | 示例值 |
|
||
|--------|------|------|---------|
|
||
| `success` | boolean | 请求是否成功 | `true` |
|
||
| `message` | string | 响应消息 | `"查询成功"` |
|
||
| `data` | array | 图书信息列表 | - |
|
||
|
||
**图书信息字段说明(data数据)**
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| `author` | string | 作者 |
|
||
| `binding_layout` | string | 装帧布局 |
|
||
| `book_name` | string | 图书名称 |
|
||
| `book_pic` | string | 图书图片(大图) |
|
||
| `book_pic_s` | string | 图书图片(小图) |
|
||
| `buyCount` | string | 购买数量 |
|
||
| `category` | string | 分类 |
|
||
| `condition` | string | 图书状况 |
|
||
| `content` | string | 内容简介 |
|
||
| `edition` | string | 版次 |
|
||
| `editor` | string | 编者 |
|
||
| `express_delivery_fee` | string | 快递费用 |
|
||
| `fix_price` | string | 定价 |
|
||
| `format` | string | 开本 |
|
||
| `isbn` | string | ISBN号 |
|
||
| `item_id` | number | 商品ID |
|
||
| `languages` | string | 语言 |
|
||
| `mid` | number | 商家ID |
|
||
| `pages` | string | 页数 |
|
||
| `paper` | string | 纸张 |
|
||
| `print_time` | string | 印刷时间 |
|
||
| `publication_time` | number | 出版时间(时间戳) |
|
||
| `publisher` | string | 出版社 |
|
||
| `sellCount` | string | 销售数量 |
|
||
| `shop_id` | number | 店铺ID |
|
||
| `wordage` | string | 字数 |
|
||
|
||
**响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "查询成功",
|
||
"data": {
|
||
"author": "",
|
||
"binding_layout": "",
|
||
"book_name": "",
|
||
"book_pic": "",
|
||
"book_pic_s": "https://www0.kfzimg.com/sw/kfz-cos/kfzimg/adaaecbf/a1e5df0a21cfdbba_s.jpg",
|
||
"buyCount": "",
|
||
"category": "",
|
||
"condition": "",
|
||
"content": "",
|
||
"edition": "",
|
||
"editor": "",
|
||
"express_delivery_fee": "",
|
||
"fix_price": "",
|
||
"format": "",
|
||
"isbn": "",
|
||
"item_id": 0,
|
||
"languages": "",
|
||
"mid": 0,
|
||
"pages": "",
|
||
"paper": "",
|
||
"print_time": "",
|
||
"publication_time": 0,
|
||
"publisher": "",
|
||
"sellCount": "",
|
||
"shop_id": 0,
|
||
"wordage": ""
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 获取店铺图书信息
|
||
|
||
**请求信息**
|
||
|
||
shopResult, err := manager.GetKFZShopBookInfo(
|
||
proxyType, //代理类型
|
||
username, //小象代理账号
|
||
password, //小象代理密码
|
||
machineCode, //内置代理机械码
|
||
shopId,
|
||
isImage,
|
||
bookNum,
|
||
pageNum,
|
||
sortType,
|
||
sort,
|
||
priceDown,
|
||
priceUp,
|
||
)
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|--------|----|------------------------------------------------|
|
||
| fetchMode | string | 是 | 是否使用代理 (使用代理:proxy 不使用代理:direct) |
|
||
| proxyType | string | 是 | 代理类型(小象代理:CALF_ELEPHANT_PROXY,内置代理:TAIL_PROXY) |
|
||
| username | string | 是 | 小象代理账号 |
|
||
| password | string | 是 | 小象代理密码 |
|
||
| machineCode | string | 是 | 内置代理机械码 |
|
||
| shopId | string | 是 | 店铺编号 |
|
||
| isImage | string | 否 | 是否有图片 |
|
||
| bookNum | string | 否 | 图书数量 |
|
||
| pageNum | string | 否 | 页数 |
|
||
| sortType | string | 否 | 排序类型(sort,putDate,newItem,price只有这四种) |
|
||
| sort | string | 否 | 排序方式(asc,desc) |
|
||
| priceUp | string | 否 | 最低价格 |
|
||
| priceDown | string | 否 | 最高价格 |
|
||
|
||
|
||
**响应数据**
|
||
|
||
| 字段名 | 类型 | 说明 | 示例值 |
|
||
|--------|------|--------|---------|
|
||
| `success` | boolean | 请求是否成功 | `true` |
|
||
| `message` | string | 响应消息 | `"查询成功"` |
|
||
| `goods_num` | string | 商品数量 | `"查询成功"` |
|
||
| `pnum` | string | 店铺商品页数 | `"查询成功"` |
|
||
| `data` | array | 图书信息列表 | - |
|
||
|
||
**图书信息字段说明(data数据)**
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|--------|
|
||
| `book_name` | string | 书名 |
|
||
| `author` | string | 作者 |
|
||
| `publisher` | string | 出版社 |
|
||
| `isbn` | string | ISBN号 |
|
||
| `publication_time` | number | 出版时间(时间戳) |
|
||
| `edition` | string | 版次 |
|
||
| `print_time` | string | 印刷时间 |
|
||
| `fix_price` | string | 定价 |
|
||
| `binding_layout` | string | 装帧 |
|
||
| `format` | string | 开本 |
|
||
| `paper` | string | 纸张 |
|
||
| `pages` | string | 页数 |
|
||
| `wordage` | string | 字数 |
|
||
| `languages` | string | 语种 |
|
||
| `era` | string | 年代 |
|
||
| `engraving_method` | string | 刻印方式 |
|
||
| `dimensions` | string | 尺寸 |
|
||
| `volume_number` | string | 册数 |
|
||
| `book_pic` | string | 图书图片(官图) |
|
||
| `book_pic_s` | string | 图书图片(实拍图) |
|
||
| `selling_price` | string | 售价 |
|
||
| `condition` | string | 品相 |
|
||
| `express_delivery_fee` | string | 快递费 |
|
||
| `editor` | string | 编辑 |
|
||
| `category` | string | 分类 |
|
||
| `buy_count` | string | 买过 |
|
||
| `sell_count` | string | 买过 |
|
||
| `content` | string | 内容 |
|
||
| `mid` | number | 商家ID |
|
||
| `item_id` | number | 商品ID |
|
||
| `shop_id` | number | 店铺ID |
|
||
|
||
**响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "查询成功",
|
||
"goods_num": "",
|
||
"pnum": "",
|
||
"data": [
|
||
{
|
||
"author": "",
|
||
"binding_layout": "",
|
||
"book_name": "",
|
||
"book_pic": "",
|
||
"book_pic_s": "https://www0.kfzimg.com/sw/kfz-cos/kfzimg/cddbcbda/6833c1d27437d121_s.jpg",
|
||
"buyCount": "",
|
||
"category": "",
|
||
"condition": "",
|
||
"content": "",
|
||
"edition": "",
|
||
"editor": "",
|
||
"express_delivery_fee": "",
|
||
"fix_price": "",
|
||
"format": "",
|
||
"isbn": "",
|
||
"item_id": 0,
|
||
"languages": "",
|
||
"mid": 0,
|
||
"pages": "",
|
||
"paper": "",
|
||
"print_time": "",
|
||
"publication_time": 0,
|
||
"publisher": "",
|
||
"sellCount": "",
|
||
"shop_id": 0,
|
||
"wordage": ""
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 4. 根据url获取单个图书详情信息
|
||
|
||
**请求信息**
|
||
|
||
shopResult, err := manager.GetUrlBookDetails(
|
||
fetchMode,
|
||
proxyType,
|
||
username,
|
||
password,
|
||
machineCode,
|
||
url
|
||
)
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|--------|----|------------------------------------------------|
|
||
| fetchMode | string | 是 | 是否使用代理 (使用代理:proxy 不使用代理:direct) |
|
||
| proxyType | string | 是 | 代理类型(小象代理:CALF_ELEPHANT_PROXY,内置代理:TAIL_PROXY) |
|
||
| username | string | 是 | 小象代理账号 |
|
||
| password | string | 是 | 小象代理密码 |
|
||
| machineCode | string | 是 | 内置代理机械码 |
|
||
| url | string | 是 | 传入详情页的url |
|
||
|
||
|
||
**响应数据**
|
||
|
||
| 字段名 | 类型 | 说明 | 示例值 |
|
||
|--------|------|--------|---------|
|
||
| `success` | boolean | 请求是否成功 | `true` |
|
||
| `message` | string | 响应消息 | `"查询成功"` |
|
||
| `goods_num` | string | 商品数量 | `"查询成功"` |
|
||
| `pnum` | string | 店铺商品页数 | `"查询成功"` |
|
||
| `data` | array | 图书信息列表 | - |
|
||
|
||
**图书信息字段说明(data数据)**
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|--------|
|
||
| `book_name` | string | 书名 |
|
||
| `author` | string | 作者 |
|
||
| `publisher` | string | 出版社 |
|
||
| `isbn` | string | ISBN号 |
|
||
| `publication_time` | number | 出版时间(时间戳) |
|
||
| `edition` | string | 版次 |
|
||
| `print_time` | string | 印刷时间 |
|
||
| `fix_price` | string | 定价 |
|
||
| `binding_layout` | string | 装帧 |
|
||
| `format` | string | 开本 |
|
||
| `paper` | string | 纸张 |
|
||
| `pages` | string | 页数 |
|
||
| `wordage` | string | 字数 |
|
||
| `languages` | string | 语种 |
|
||
| `era` | string | 年代 |
|
||
| `engraving_method` | string | 刻印方式 |
|
||
| `dimensions` | string | 尺寸 |
|
||
| `volume_number` | string | 册数 |
|
||
| `book_pic` | string | 图书图片(官图) |
|
||
| `book_pic_s` | string | 图书图片(实拍图) |
|
||
| `selling_price` | string | 售价 |
|
||
| `condition` | string | 品相 |
|
||
| `express_delivery_fee` | string | 快递费 |
|
||
| `editor` | string | 编辑 |
|
||
| `category` | string | 分类 |
|
||
| `buy_count` | string | 买过 |
|
||
| `sell_count` | string | 买过 |
|
||
| `content` | string | 内容 |
|
||
| `mid` | number | 商家ID |
|
||
| `item_id` | number | 商品ID |
|
||
| `shop_id` | number | 店铺ID |
|
||
|
||
**响应示例**
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"message": "查询成功",
|
||
"goods_num": "",
|
||
"pnum": "",
|
||
"data": [
|
||
{
|
||
"author": "",
|
||
"binding_layout": "",
|
||
"book_name": "",
|
||
"book_pic": "",
|
||
"book_pic_s": "https://www0.kfzimg.com/sw/kfz-cos/kfzimg/cddbcbda/6833c1d27437d121_s.jpg",
|
||
"buyCount": "",
|
||
"category": "",
|
||
"condition": "",
|
||
"content": "",
|
||
"edition": "",
|
||
"editor": "",
|
||
"express_delivery_fee": "",
|
||
"fix_price": "",
|
||
"format": "",
|
||
"isbn": "",
|
||
"item_id": 0,
|
||
"languages": "",
|
||
"mid": 0,
|
||
"pages": "",
|
||
"paper": "",
|
||
"print_time": "",
|
||
"publication_time": 0,
|
||
"publisher": "",
|
||
"sellCount": "",
|
||
"shop_id": 0,
|
||
"wordage": ""
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 5. 初始化
|
||
|
||
**请求信息**
|
||
|
||
manager.Initialize(
|
||
configJSON,
|
||
)
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|--------|----|------|
|
||
| configJSON | string | 是 | 配置信息 |
|
||
|
||
**响应数据**
|
||
|
||
| 字段名 | 类型 | 说明 | 示例值 |
|
||
|--------|------|--------|---------|
|
||
| `success` | boolean | 请求是否成功 | `true` |
|
||
| `message` | string | 响应消息 | `"查询成功"` |
|
||
|
||
**图书信息字段说明(data数据)**
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|--------|
|
||
| `book_name` | string | 书名 |
|
||
| `author` | string | 作者 |
|
||
| `publisher` | string | 出版社 |
|
||
| `isbn` | string | ISBN号 |
|
||
| `publication_time` | number | 出版时间(时间戳) |
|
||
| `edition` | string | 版次 |
|
||
| `print_time` | string | 印刷时间 |
|
||
| `fix_price` | string | 定价 |
|
||
| `binding_layout` | string | 装帧 |
|
||
| `format` | string | 开本 |
|
||
| `paper` | string | 纸张 |
|
||
| `pages` | string | 页数 |
|
||
| `wordage` | string | 字数 |
|
||
| `languages` | string | 语种 |
|
||
| `era` | string | 年代 |
|
||
| `engraving_method` | string | 刻印方式 |
|
||
| `dimensions` | string | 尺寸 |
|
||
| `volume_number` | string | 册数 |
|
||
| `book_pic` | string | 图书图片(官图) |
|
||
| `book_pic_s` | string | 图书图片(实拍图) |
|
||
| `selling_price` | string | 售价 |
|
||
| `condition` | string | 品相 |
|
||
| `express_delivery_fee` | string | 快递费 |
|
||
| `editor` | string | 编辑 |
|
||
| `category` | string | 分类 |
|
||
| `buy_count` | string | 买过 |
|
||
| `sell_count` | string | 买过 |
|
||
| `content` | string | 内容 |
|
||
| `mid` | number | 商家ID |
|
||
| `item_id` | number | 商品ID |
|
||
| `shop_id` | number | 店铺ID |
|
||
|
||
|
||
|
||
|
||
# proxyConfig.dll文件使用讲解
|
||
由于是kongfz.dll文件去调用proxyConfig.dll文件里面的函数,无需再去调用。
|
||
除非直接使用proxyConfig.dll文件。
|
||
## 1.直接使用proxyConfig.dll文件,应先加载DLL
|
||
```go
|
||
func main(){
|
||
// 加载DLL
|
||
manager, err := NewDLLManager("文件路径")
|
||
if err != nil {
|
||
log.Fatalf("初始化DLL管理器失败: %v", err)
|
||
}
|
||
// 确保字段被释放,但是需要注意,如果加这个,可能把你的dll文件释放掉了,导致程序崩溃
|
||
defer manager.Close()
|
||
}
|
||
|
||
|
||
type DLLManager struct {
|
||
dll *syscall.DLL
|
||
}
|
||
|
||
func NewDLLManager(dllPath string) (*DLLManager, error) {
|
||
dll, err := syscall.LoadDLL(dllPath)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("加载DLL失败: %v", err)
|
||
}
|
||
return &DLLManager{dll: dll}, nil
|
||
}
|
||
|
||
func (m *DLLManager) Close() {
|
||
if m.dll != nil {
|
||
m.dll.Release()
|
||
}
|
||
}
|
||
|
||
// ProxyTypeManager 调用代理类型管理器
|
||
func (m *ProxyConfigManager) ProxyTypeManager(proxyType, username, password, machineCode string) (string, error) {
|
||
proc, err := m.dll.FindProc("ProxyTypeManager")
|
||
if err != nil {
|
||
return "", fmt.Errorf("找不到函数 ProxyTypeManager: %v", err)
|
||
}
|
||
|
||
// 准备参数
|
||
proxyTypePtr, _ := syscall.BytePtrFromString(proxyType)
|
||
usernamePtr, _ := syscall.BytePtrFromString(username)
|
||
passwordPtr, _ := syscall.BytePtrFromString(password)
|
||
machineCodePtr, _ := syscall.BytePtrFromString(machineCode)
|
||
|
||
// 调用函数
|
||
r1, _, err := proc.Call(
|
||
uintptr(unsafe.Pointer(proxyTypePtr)),
|
||
uintptr(unsafe.Pointer(usernamePtr)),
|
||
uintptr(unsafe.Pointer(passwordPtr)),
|
||
uintptr(unsafe.Pointer(machineCodePtr)),
|
||
)
|
||
|
||
if err != nil && err.Error() != "The operation completed successfully." {
|
||
return "", fmt.Errorf("调用 ProxyTypeManager 失败: %v", err)
|
||
}
|
||
|
||
// 转换结果
|
||
result := (*byte)(unsafe.Pointer(r1))
|
||
var resultBytes []byte
|
||
for i := 0; ; i++ {
|
||
bytePtr := (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(result)) + uintptr(i)))
|
||
if *bytePtr == 0 {
|
||
break
|
||
}
|
||
resultBytes = append(resultBytes, *bytePtr)
|
||
}
|
||
|
||
// 释放内存
|
||
freeProc, _ := m.dll.FindProc("FreeCString")
|
||
if freeProc != nil {
|
||
freeProc.Call(r1)
|
||
}
|
||
|
||
return string(resultBytes), nil
|
||
}
|
||
```
|
||
|
||
## 直接调用ProxyTypeManager函数方法
|
||
```go
|
||
typeManager, err := globalProxyManager.ProxyTypeManager(
|
||
proxyType,
|
||
username,
|
||
password,
|
||
machineCode,
|
||
)
|
||
```
|
||
**请求信息**
|
||
typeManager, err := globalProxyManager.ProxyTypeManager(
|
||
proxyType,
|
||
username,
|
||
password,
|
||
machineCode,
|
||
)
|
||
|
||
**请求参数**
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|------|--------|----|------------|
|
||
| proxyType | string | 是 | 代理类型(小象代理:CALF_ELEPHANT_PROXY,内置代理:TAIL_PROXY) |
|
||
| username | string | 是 | 小象代理账号 |
|
||
| password | string | 是 | 小象代理密码 |
|
||
| machineCode | string | 是 | 内置代理机械码 |
|
||
|
||
**响应信息**
|
||
string字符串: http://18434270290:JWt15lWW@111.179.77.244:44751 |