daShangDao_kfzgw-info/md/main.md
2025-11-24 13:50:54 +08:00

23 KiB
Raw Blame History

针对kongfz.dll文件使用教程

1.需要先创建dll工具实例

1. 加载DLL用于调用dll文件代码示例

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.初始化配置信息,代码示例:

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"`
}

直接调用接口,代码示例:入参、返回参数都在下面

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 字数

响应示例

{
  "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 字数

响应示例

{
    "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

响应示例

{
  "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

响应示例

{
  "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

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函数方法

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