#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 汇吉采 <-- 一站式:推送标书项目测试脚本(入向 POST /api/hjc/push/project) 用法: python hjc_test_push.py # 默认 http://uk.frp.one:62335 python hjc_test_push.py http://uk.frp.one:62335 python hjc_test_push.py --base http://uk.frp.one:62335 --project-no TEST-xxx 无第三方依赖,仅标准库(hashlib + urllib)。时间用北京时间(UTC+8)。 签名 sign = MD5(appKey + password + timestamp),timestamp = yyyyMMddHHmm。 """ import sys import json import hashlib import urllib.request import urllib.error import datetime APP_KEY = "HJC_Official_Website" PASSWORD = "vQ8$kR3#mW6@xP2!nF" DEFAULT_BASE = "http://uk.frp.one:62335" DEFAULT_PAYLOAD = { "projectNo": "TEST-HJC-20260801", "projectName": "测试标书项目·服务器采购", "category": "货物类", "tenderPrice": 500.00, "files": "[{\"name\":\"招标文件.pdf\",\"url\":\"https://file.example.com/t.pdf\"}]", "tenderOnsaleTime": "2026-08-01 09:00:00", "tenderOffsaleTime": "2026-08-10 17:00:00", "bulletinName": "中标公告-测试", "customerName": "某招标单位", "supplierName": "某中标公司", "bidAmount": 128000.00, "content": "测试公告正文。中标供应商:某中标公司,中标金额 128000 元。", "fileList": "[{\"name\":\"中标通知书.pdf\",\"url\":\"https://file.example.com/n.pdf\"}]", "needSellTender": 1, "sellingMethod": 2 } def bj_now() -> str: """北京时间 yyyyMMddHHmm""" return (datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=8)).strftime("%Y%m%d%H%M") def main(): base = DEFAULT_BASE payload = dict(DEFAULT_PAYLOAD) args = sys.argv[1:] i = 0 while i < len(args): a = args[i] if a in ("--base", "-b"): base = args[i + 1] i += 2 elif a in ("--project-no", "-p"): payload["projectNo"] = args[i + 1] i += 2 elif a == "--json": with open(args[i + 1], encoding="utf-8") as f: payload = json.load(f) i += 2 else: base = a # 位置参数作为 baseUrl i += 1 url = base.rstrip("/") + "/api/hjc/push/project" ts = bj_now() sign = hashlib.md5((APP_KEY + PASSWORD + ts).encode("utf-8")).hexdigest() body = json.dumps(payload, ensure_ascii=False).encode("utf-8") req = urllib.request.Request(url, data=body, method="POST", headers={ "Content-Type": "application/json; charset=utf-8", "appKey": APP_KEY, "timestamp": ts, "sign": sign, "tenantId": "10626" }) print("== 请求 ==") print("URL:", url) print("timestamp:", ts, "| sign:", sign) print("body:", body.decode("utf-8")) print() print("== 响应 ==") try: with urllib.request.urlopen(req, timeout=20) as resp: print("HTTP", resp.status) print(resp.read().decode("utf-8")) except urllib.error.HTTPError as e: print("HTTP", e.code) print(e.read().decode("utf-8")) except Exception as e: print("ERROR:", type(e).__name__, e) if __name__ == "__main__": main()