Files
pyGoEdge-UserPanel/core/__pycache__/goedge_client.cpython-312.pyc

155 lines
41 KiB
Plaintext
Raw Normal View History

2025-11-18 03:36:49 +08:00
<EFBFBD>
i<>x<00><00><><00>ddlZddlZddlZddlZddlZddlmZmZmZm Z ddl
Z
ddl m Z ddl
m Z ddlmZddlmZej$e<13>ZdZGd <09>d
<EFBFBD>Zd
gZy) <0B>N)<04>Any<6E>Dict<63>List<73>Optional)<01>urlparse)<01>RequestException)<01>timezone<6E>)<01>SystemSettings)<02><00>c<00>*<00>eZdZdZd<02>Zedefd<04><04>Zdee e ffd<05>Z
de fd<06>Z de de fd<08>Z dId
<EFBFBD>Z dJd ee d ee d edededeeedefd<11>Z dKde d ee dee efd ededeeedefd<15>ZdLdededeee effd<18>ZdMdededeee effd<1A>ZdNdedede deee effd<1C>Zdedeefd<1D>ZdOdeded eedd fd!<21>Zdededd fd"<22>Zdedeefd#<23>Zd$ed%edd fd&<26>ZdOdeded eedd fd'<27>Zdedeee effd(<28>Zdedee effd)<29>Zd edefd*<2A>Z d edefd+<2B>Z!ded,ee efdd fd-<2D>Z"ded.ee efdd fd/<2F>Z#ded0ee efdd fd1<64>Z$ded2ee efdd fd3<64>Z%ded4ee efdd fd5<64>Z&ded6ee efdd fd7<64>Z'ded8ee efdd fd9<64>Z(ded:ee efdd fd;<3B>Z) dPded<ee d=ed>ee d?ee d@edAee dBee dCee dDeedee effdE<64>Z*d<e dee effdF<64>Z+ dQded<ee d>ee d?ee d=edGedee effdH<64>Z,y )R<> GoEdgeClientu<74>
GoEdge 管理员 API 客户端封装:
- 令牌获取与缓存SystemSettings + 环境变量回退)
- 网站创建HTTP 反向代理)
- 流量统计读取(按日、带宽峰值)
c<00><><00>|j<00>}|jxsd|_|jxst j
dd<01>|_|j xst j
dd<01>|_|jxst j
dd<01>|_|j|_
|j<00>y)N<><00>GOEDGE_ACCESS_KEY_ID<49>GOEDGE_ACCESS_KEY<45>GOEDGE_ACCESS_TOKEN) <0C> _get_settings<67>goedge_base_url<72>base_url<72>admin_access_key_id<69>os<6F>getenv<6E>admin_access_key<65>edge_access_token<65>_token<65>edge_token_expires_at<61>
_token_exp<EFBFBD>_validate_base_url)<02>self<6C>settingss <20>)E:\Project\pygoedge\core\goedge_client.py<70>__init__zGoEdgeClient.__init__s<><00><00><17>%<25>%<25>'<27><08>%<25>5<>5<>;<3B><12><04> <0A>(0<>(D<>(D<>(m<><02> <09> <09>Rh<52>jl<6A>Hm<48><04> <20>%-<2D>%><3E>%><3E>%d<>"<22>)<29>)<29>L_<4C>ac<61>Bd<42><04><1D>#<23>5<>5<>]<5D><12><19><19>CX<43>Z\<5C>9]<5D><04> <0B>7?<3F>7U<37>7U<37><04><0F> <0C><1F><1F>!<21><00>returnc<00><><00>tjjd<01>j<00>}|stjj <00>}|S)N<>id)r <00>objects<74>order_by<62>first<73>create)r"s r#rzGoEdgeClient._get_settings&s?<00><00>"<22>)<29>)<29>2<>2<>4<EFBFBD>8<>><3E>><3E>@<40><08><17>%<25>-<2D>-<2D>4<>4<>6<>H<EFBFBD><17>r%c<00>,<00>|j<00>}d|d<02>S)N<>application/json)<02> Content-TypezX-Edge-Access-Token)<01> _ensure_token)r!<00>tokens r#<00>_headerszGoEdgeClient._headers.s <00><00><14>"<22>"<22>$<24><05>.<2E>#(<28>
<EFBFBD>
r%c<00><><00>|jr9|jr!|jtj<00>kDr |jS|jr|j
r |j s td<01><00>|jd<02>}d|j
|j d<04>}tj|dditj|<02><00><07>} tj|dditj|<02>t<00><08>}|j<00>|j<00>}t!|j#d
d <0B><00>d k7rtd |<05><00><02><00>|dd}|dj#d<10>}||_|r: t$j$j't!|<07>tj(<00><11>}n+tj<00>t%j,d<12><13>z}||_|j/<00>} || _|| _| j5ddg<02><16>|S#t$r}td |<04><00><02><00>d}~wwxYw#t*$r.tj<00>t%j,d<12><13>z}Y<00><>wxYw)Nu[GoEdge API配置不完整需 base_url、access_key_id、access_key 或提供现成令牌z(/APIAccessTokenService/getAPIAccessToken<65>admin)<03>type<70> accessKeyId<49> accessKeyr/r.)<02>headers<72>data<74>r8r9<00>timeoutu 获取AccessToken请求失败<E8B4A5>code<64><65><00><>u获取AccessToken失败: r9r1<00> expiresAt)<01>tz<74>)<01>hoursrr)<01> update_fields)rrr <00>nowrrr<00> RuntimeError<6F>_join<69>requests<74>post<73>json<6F>dumps<70>DEFAULT_TIMEOUTr<00>raise_for_status<75>int<6E>get<65>datetime<6D> fromtimestamp<6D>utc<74> Exception<6F> timedeltarrr<00>save)
r!<00>url<72>payload<61>resp<73>er9r1<00>
expires_at<EFBFBD>exp_dtr"s
r#r0zGoEdgeClient._ensure_token5s<00><00> <0F>;<3B>;<3B><17>?<3F>?<3F>d<EFBFBD>o<EFBFBD>o<EFBFBD><08> <0C> <0C><0E>&F<><1B>{<7B>{<7B>"<22><14> <0A> <0A>$<24>":<3A>":<3A>t<EFBFBD>?T<>?T<><1E>|<7C>}<7D> }<7D><12>j<EFBFBD>j<EFBFBD>C<>D<><03><1B><1F>3<>3<><1D>.<2E>.<2E>
<EFBFBD><07>
<18>}<7D>}<7D>S<EFBFBD>><3E>;M<>*N<>UY<55>U_<55>U_<55>`g<>Uh<55>i<><04> G<01><1B>=<3D>=<3D><13>~<7E>?Q<>.R<>Y]<5D>Yc<59>Yc<59>dk<64>Yl<59>wF<02>G<02>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04> <0E>t<EFBFBD>x<EFBFBD>x<EFBFBD><06><03>$<24> %<25><13> ,<2C><1E>!:<3A>4<EFBFBD>&<26>A<>B<> B<><14>V<EFBFBD> <0C>W<EFBFBD>%<25><05><19>&<26>\<5C>%<25>%<25>k<EFBFBD>2<>
<EFBFBD><1B><04> <0B> <15> F<01>!<21>*<2A>*<2A>8<>8<><13>Z<EFBFBD><1F>X<EFBFBD>\<5C>\<5C>8<>Z<><06><1E>\<5C>\<5C>^<5E>h<EFBFBD>&8<>&8<>q<EFBFBD>&A<>A<>F<EFBFBD> <20><04><0F><17>%<25>%<25>'<27><08>%*<2A><08>"<22>)/<2F><08>&<26><10> <0A> <0A>%8<>:Q<>$R<> <0A>S<><14> <0C><>- <20> G<01><1E>!A<>!<21><13>E<>F<> F<><46> G<01><><1D> F<01>!<21><1C><1C><1E>(<28>*<<3C>*<<3C>1<EFBFBD>*E<>E<><06> F<01>s*<00>2H<00>28H0<00> H-<03>H(<03>(H-<03>04I'<03>&I'<03>pathc<00>b<00>|jjd<01>dz|jd<01>zS)N<>/)r<00>rstrip<69>lstrip)r!r[s r#rFzGoEdgeClient._join^s*<00><00><14> <0A> <0A>$<24>$<24>S<EFBFBD>)<29>C<EFBFBD>/<2F>$<24>+<2B>+<2B>c<EFBFBD>2B<32>B<>Cr%Nc<00><><00>|js td<01><00>t|j<00>}|jr |jstd|j<00><00><02><00>d|jvrA|jj dd<04>\}} t |<03>}|dks|dkDr td<06><00>yy#t$rtd|j<00><00><02><00>wxYw) uL校验 base_url 的格式与端口范围便于快速定位配置错误。uGGoEdge API配置不完整缺少 base_url (GOEDGE_ADMIN_API_BASE_URL)u"GOEDGE_ADMIN_API_BASE_URL无效<E69588>:r
i<><69>zport out of rangeu;GOEDGE_ADMIN_API_BASE_URL端口非法需在1-65535N) rrEr<00>scheme<6D>netloc<6F>rsplitrM<00>
ValueErrorrR)r!<00>p<>host<73>port_str<74>ports r#r zGoEdgeClient._validate_base_urlas<><00><00><13>}<7D>}<7D><1E>h<>i<> i<> <14>T<EFBFBD>]<5D>]<5D> #<23><01><10>x<EFBFBD>x<EFBFBD>q<EFBFBD>x<EFBFBD>x<EFBFBD><1E>!C<>D<EFBFBD>M<EFBFBD>M<EFBFBD>?<3F>S<>T<> T<> <0E>!<21>(<28>(<28>?<3F><1E>X<EFBFBD>X<EFBFBD>_<EFBFBD>_<EFBFBD>S<EFBFBD>!<21>4<>N<EFBFBD>D<EFBFBD>(<28> r<01><1A>8<EFBFBD>}<7D><04><17>!<21>8<EFBFBD>t<EFBFBD>e<EFBFBD>|<7C>$<24>%8<>9<>9<> ,<2C> <1B><> <1D> r<01>"<22>%`<60>ae<61>an<61>an<61>`o<>#p<>q<>q<> r<01>s <00> B-<00>-"C<03>domains<6E> origin_addrs<72>user_id<69>enable_websocket<65>node_cluster_id<69> ssl_cert_idsc<00><><00>|}|s |j<00>}|jxsd}|s2tjdd<03>j <00>} | r t | <09>}|s td<05><00>|jd<06>}
||||xsg||d<07>} tj|
|j<00>tj| <0B>t<00><08>} | j!<00>| j<00>}|j#d <0B>}|std |<0E><00><02><00>t |<0F>S#t $rtd| <09><00><02><00>wxYw#t$r} td | <0A><00><02><00>d
} ~ wwxYw) uH调用 createBasicHTTPServer 快速创建HTTP网站并返回 serverId。r<00>GOEDGE_DEFAULT_NODE_CLUSTER_IDr<00>(GOEDGE_DEFAULT_NODE_CLUSTER_ID 非法<E6B395><EFBC9A>未配置 nodeClusterId请在 SystemSettings.default_node_cluster_id 或 .env(GOEDGE_DEFAULT_NODE_CLUSTER_ID) 设置有效集群IDz$/ServerService/createBasicHTTPServer)<06> nodeClusterId<49>userIdrj<00>
sslCertIds<EFBFBD> originAddrs<72>enableWebsocketr:u创建HTTP网站请求失败N<EFBC9A>serverIdu创建HTTP网站失败: )r<00>default_node_cluster_idrr<00>striprMrRrErFrGrHr2rIrJrKrrLrN)r!rjrkrlrmrnro<00>effective_cluster_id<69>s<>env_valrUrVrWrXr9<00> server_ids r#<00>create_basic_http_serverz%GoEdgeClient.create_basic_http_serverssb<00><00> /<2F><1C>#<23><14>"<22>"<22>$<24>A<EFBFBD>#$<24>#<<3C>#<<3C>#A<><01> <20>#<23><18>i<EFBFBD>i<EFBFBD> @<40>"<22>E<>K<>K<>M<>G<EFBFBD><16>]<01>+.<2E>w<EFBFBD><<3C>(<28>$<24><1E> g<02>h<02> h<02><12>j<EFBFBD>j<EFBFBD>?<3F>@<40><03>1<><1D><1E>&<26>,<2C>"<22>'<27>/<2F> 
<EFBFBD><07> F<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><18>H<EFBFBD>H<EFBFBD>Z<EFBFBD>(<28> <09><18><1E>!9<>$<24><16>@<40>A<> A<><12>9<EFBFBD>~<7E><1D><>-!<21>]<01>&<26>)Q<>RY<52>QZ<51>'[<5B>\<5C>\<5C>]<01><> <20> F<01><1E>!@<40><11><03>D<>E<> E<><45> F<01>s$<00> D<00>>D*<00>D'<03>* E<03>3E<03>E<03>name<6D>reverse_proxy_json<6F>server_group_idsc
<00><><00>|jd<01>}tjtjd|D<00>cgc]}d|i<01><02>c}i<01>j d<04><00>j d<04>} tjtj|<03>j d<04><00>j d<04>}
|} | s |j<00>} | jxsd} | s2tjdd<07>j<00>} | r t| <0A>} | s td <09><00>d
|||| | |
|xsgd <0B>} tj ||j#<00>tj|<0E>t$<00> <0C>}|j)<00>|j<00>}|j+d<0F>}|std|<11><00><02><00>t|<12>Scc}w#t$rtd| <0A><00><02><00>wxYw#t&$r}td |<10><00><02><00>d}~wwxYw)u:更灵活的 createServer 创建 httpProxy 类型服务。z/ServerService/createServer<65>namesr<73><00>utf-8rrqrrrrs<00> httpProxy)r5r<><00> descriptionrurt<00>serverNamesJSON<4F>reverseProxyJSON<4F>serverGroupIdsr:u创建网站请求失败Nryu创建网站失败: )rF<00>base64<36> b64encoderIrJ<00>encode<64>decoderrzrrr{rMrRrErGrHr2rKrrLrN)r!r<>rjr<>rlrnr<>rU<00>d<>server_names_json<6F>reverse_proxy_b64r|r}r~rVrWrXr9rs r#<00>create_server_http_proxyz%GoEdgeClient.create_server_http_proxy<78>s<><00><00><13>j<EFBFBD>j<EFBFBD>6<>7<><03>"<22>,<2C>,<2C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD> <13>7<EFBFBD>3<>7<EFBFBD>a<EFBFBD>v<EFBFBD>q<EFBFBD>k<EFBFBD>7<EFBFBD>3<>9
<EFBFBD>. <0B> <11>6<EFBFBD>'<27>?<3F><1C>"<22>F<EFBFBD>7<EFBFBD>O<EFBFBD> <1A>#<23>,<2C>,<2C>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>8J<38>-K<>-R<>-R<>SZ<53>-[<5B>\<5C>c<>c<>dk<64>l<><19>.<2E><1C>#<23><14>"<22>"<22>$<24>A<EFBFBD>#$<24>#<<3C>#<<3C>#A<><01> <20>#<23><18>i<EFBFBD>i<EFBFBD> @<40>"<22>E<>K<>K<>M<>G<EFBFBD><16>]<01>+.<2E>w<EFBFBD><<3C>(<28>$<24><1E> g<02>h<02> h<02><1F><18><1F><1D>1<>0<> 1<>.<2E>4<>"<22> 
<EFBFBD><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><18>H<EFBFBD>H<EFBFBD>Z<EFBFBD>(<28> <09><18><1E>!5<>d<EFBFBD>V<EFBFBD><<3C>=<3D> =<3D><12>9<EFBFBD>~<7E><1D><>I4<><34>!<21>]<01>&<26>)Q<>RY<52>QZ<51>'[<5B>\<5C>\<5C>]<01><>  <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01>s)<00> F/<0E>= F4<00>%>G<00>4G <03> G+<03>G&<03>&G+r<00>daysc<00>N<00>|jd<01>}||d<02>} tj||j<00>t j
|<04>t <00><03>}|j<00>|j <00>}|jdg<00>S#t$r}td|<06><00><02><00>d}~wwxYw)Nz2/ServerDailyStatService/findLatestServerDailyStats)ryr<>r:u!读取每日统计请求失败<E8B4A5>stats<74> rFrGrHr2rIrJrKrrErLrN)r!rr<>rUrVrWrXr9s r#<00>find_latest_server_daily_statsz+GoEdgeClient.find_latest_server_daily_stats<74>s<><00><00><12>j<EFBFBD>j<EFBFBD>M<>N<><03>(<28>$<24>7<><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><13>x<EFBFBD>x<EFBFBD><07><12>$<24>$<24><>  <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01>s<00>>B<00> B$<03>B<03>B$rBc<00>r<00>|jd<01>}t|<01>t|<02>d<02>} tj||j <00>t j |<04>t<00><03>}|j<00>|j <00>}|jdg<00>S#t$r}td|<06><00><02><00>d}~wwxYw)Nz3/ServerDailyStatService/findLatestServerHourlyStats)ryrBr:u!读取每小时请求数失败r<EFBC9A>) rFrMrGrHr2rIrJrKrrErLrN)r!rrBrUrVrWrXr9s r#<00>find_latest_server_hourly_statsz,GoEdgeClient.find_latest_server_hourly_stats<74>s<><00><00><12>j<EFBFBD>j<EFBFBD>N<>O<><03>"<22>9<EFBFBD>~<7E><03>E<EFBFBD>
<EFBFBD>C<><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><13>x<EFBFBD>x<EFBFBD><07><12>$<24>$<24><>  <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01>s<00>>B<00> B6<03>#B1<03>1B6<03>algoc<00>P<00>|jd<01>}|||d<02>} tj||j<00>t j
|<05>t <00><03>}|j<00>|j <00>}|jdg<00>S#t$r}td|<07><00><02><00>d}~wwxYw)Nz9/ServerBandwidthStatService/findDailyServerBandwidthStats)ryr<>r<>r:u!读取带宽统计请求失败r<EFBC9A>r<>) r!rr<>r<>rUrVrWrXr9s r#<00>find_daily_bandwidth_statsz'GoEdgeClient.find_daily_bandwidth_stats<74>s<><00><00><12>j<EFBFBD>j<EFBFBD>T<>U<><03>(<28>$<24><04>E<><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><13>x<EFBFBD>x<EFBFBD><07><12>$<24>$<24><>  <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01>s<00>>B <00> B%<03>B <03> B%c<00><><00>|jd<01>}d|i} tj||j<00>t j
|<03>t <00><03>}|j<00>|j <00>}|jd<06>}|sy t jtj|<07>jd<07><00>}|jd<08>} | <09>$|jd <09>xsijd<08>} | <09> t!| <09>SdS#t$r}td|<05><00><02><00>d}~wwxYw#t$rYywxYw#t$rYywxYw)
u@通过 findEnabledServerConfig 解析 serverJSON 获取 webId。<64>&/ServerService/findEnabledServerConfigryr:<00>查询网站配置失败N<EFBC9A>
serverJSONr<EFBFBD><00>webId<49>web)rFrGrHr2rIrJrKrrErLrN<00>loadsr<73><00> b64decoder<65>rRrM)
r!rrUrVrWrXr9<00>b64<36>conf<6E>web_ids
r#<00>find_server_web_idzGoEdgeClient.find_server_web_id<69>s3<00><00><12>j<EFBFBD>j<EFBFBD>A<>B<><03><1D>y<EFBFBD>)<29><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><12>h<EFBFBD>h<EFBFBD>|<7C>$<24><03><12><17> <18><17>:<3A>:<3A>f<EFBFBD>.<2E>.<2E>s<EFBFBD>3<>:<3A>:<3A>7<EFBFBD>C<>D<>D<EFBFBD><16><18><18>'<27>"<22><06> <11>><3E><1A>h<EFBFBD>h<EFBFBD>u<EFBFBD>o<EFBFBD>+<2B><12>0<>0<><17>9<>F<EFBFBD> <18>"(<28>"4<>3<EFBFBD>v<EFBFBD>;<3B> ><3E>$<24> ><3E><>! <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01><><19> <18><17> <18><><19> <18><17> <18>sA<00>>D<00>
7D'<00>9 D6<00>D6<00> D$<03>D<03>D$<03>' D3<03>2D3<03>6 E<03>E<03> http_web_id<69>is_on<6F> policy_idc<00><><00>|jd<01>}dt|<02>i}|r|rdt|<03>d<04>|d<tjt j |<05>jd<06><00>jd<06>}||d<07>} tj||j<00>t j |<07>t<00><08>}|j<00>y
#t$r} td | <09><00><02><00>d
} ~ wwxYw) uR更新 Web 访问日志设置当开启时可引用既有访问日志策略ID。z&/HTTPWebService/updateHTTPWebAccessLog<6F>isOnT<6E>r<><00>policyId<49> policyRefr<66>)<02> httpWebId<49> accessLogJSONr:u!更新访问日志配置失败N<EFBC9A>rF<00>boolrMr<>r<>rIrJr<>r<>rGrHr2rKrrErL)
r!r<>r<>r<>rU<00> payload_obj<62>access_log_b64rVrWrXs
r#<00>update_http_web_access_logz'GoEdgeClient.update_http_web_access_logs<><00><00><12>j<EFBFBD>j<EFBFBD>A<>B<><03>'-<2D>t<EFBFBD>E<EFBFBD>{<7B>&;<3B> <0B> <10>Y<EFBFBD>04<30>#<23>i<EFBFBD>.<2E>'Q<>K<EFBFBD> <0B> $<24><1F>)<29>)<29>$<24>*<2A>*<2A>[<5B>*A<>*H<>*H<><17>*Q<>R<>Y<>Y<>Za<5A>b<><0E> +<2B>n<EFBFBD>M<><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01><><00>>C<00> C+<03>C&<03>&C+c<00><><00>|jd<01>}tjtjdt |<02>i<01>j d<03><00>jd<03>}||d<04>} tj||j<00>tj|<05>t<00><05>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)u,更新 WebSocket 开关最简配置。z&/HTTPWebService/updateHTTPWebWebsocketr<74>r<>)r<><00> websocketJSONr:u更新WebSocket配置失败N)rFr<>r<>rIrJr<>r<>r<>rGrHr2rKrrErL)r!r<>r<>rU<00>ws_b64rVrWrXs r#<00>update_http_web_websocketz&GoEdgeClient.update_http_web_websockets<><00><00><12>j<EFBFBD>j<EFBFBD>A<>B<><03><17>!<21>!<21>$<24>*<2A>*<2A>f<EFBFBD>d<EFBFBD>5<EFBFBD>k<EFBFBD>-B<>"C<>"J<>"J<>7<EFBFBD>"S<>T<>[<5B>[<5B>\c<>d<><06> +<2B>f<EFBFBD>E<><07> E<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> E<01><1E>!?<3F><01>s<EFBFBD>C<>D<> D<><44> E<01>s<00>)>B8<00>8 C<03>C<03>Cc<00><00>|jd<01>}d|i} tj||j<00>t j
|<03>t <00><03>}|j<00>|j <00>}|jd<06>}|sy t jtj|<07>jd<07><00>}|jd<08>xsi} d}
t!| t"<00>rL| jd <09>}
|
s9| jd
<EFBFBD>xsi} | jd <09>xs| jd <0B>}
|
<EFBFBD> t%|
<EFBFBD>SdS#t$r}td|<05><00><02><00>d}~wwxYw#t$rYywxYw#t$rYywxYw) uh通过网站配置解析 sslPolicyId。可能存在 https.sslPolicyId 或 https.sslPolicyRef.policyId。r<E38082>ryr:r<>Nr<4E>r<><00>https<70> sslPolicyId<49> sslPolicyRefr<66>)rFrGrHr2rIrJrKrrErLrNr<>r<>r<>r<>rR<00>
isinstance<EFBFBD>dictrM) r!rrUrVrWrXr9r<>r<><00>
https_conf<EFBFBD> ssl_policy_id<69>refs r#<00>find_server_ssl_policy_idz&GoEdgeClient.find_server_ssl_policy_id'sf<00><00><12>j<EFBFBD>j<EFBFBD>A<>B<><03><1D>y<EFBFBD>)<29><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><12>h<EFBFBD>h<EFBFBD>|<7C>$<24><03><12><17> <18><17>:<3A>:<3A>f<EFBFBD>.<2E>.<2E>s<EFBFBD>3<>:<3A>:<3A>7<EFBFBD>C<>D<>D<EFBFBD><1A>X<EFBFBD>X<EFBFBD>g<EFBFBD>&<26>,<2C>"<22>
<EFBFBD><1C> <0A> <15>j<EFBFBD>$<24> '<27>&<26>N<EFBFBD>N<EFBFBD>=<3D>9<>M<EFBFBD> <20> <20>n<EFBFBD>n<EFBFBD>^<5E>4<>:<3A><02><03> #<23><07><07> <0A> 6<> M<>#<23>'<27>'<27>*<2A>:M<> <0A> <18>)6<>)B<>3<EFBFBD>}<7D>%<25> L<><04> L<><4C>' <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01><><19> <18><17> <18><><19> <18><17> <18>sA<00>>E<00>
7E#<00>5 E2<00>E2<00> E <03> E<03>E <03># E/<03>.E/<03>2 E><03>=E>r<><00>enabledc<00>0<00>|jd<01>}t|<01>t|<02>d<02>} tj||j <00>t j|<04>t<00><03>}|j<00>y#t$r}td|<06><00><02><00>d}~wwxYw)u%切换 SSL 策略的 HTTP/3 开关。z!/SSLPolicyService/updateSSLPolicy)r<><00> http3Enabledr:u更新SSL策略失败N) rFrMr<>rGrHr2rIrJrKrrErL)r!r<>r<>rUrVrWrXs r#<00>update_ssl_policy_http3z$GoEdgeClient.update_ssl_policy_http3Ds<><00><00><12>j<EFBFBD>j<EFBFBD><<3C>=<3D><03>"%<25>m<EFBFBD>"4<>d<EFBFBD>7<EFBFBD>m<EFBFBD>T<><07> ?<3F><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> ?<3F><1E>!9<>!<21><13>=<3D>><3E> ><3E><> ?<3F>s<00>>A9<00>9 B<03>B<03>Bc<00><><00>|jd<01>}dt|<02>i}|r|rdt|<03>d<04>|d<tjt j |<05>jd<06><00>jd<06>}||d<07>} tj||j<00>t j |<07>t<00><08>}|j<00>y
#t$r} td | <09><00><02><00>d
} ~ wwxYw) uI更新 Web 防火墙WAF设置可引用既有防火墙策略ID。z%/HTTPWebService/updateHTTPWebFirewallr<6C>Tr<54><00>firewallPolicyRefr<66>)r<><00> firewallJSONr:u更新防火墙配置失败Nr<4E>)
r!r<>r<>r<>rU<00> firewall_obj<62> firewall_b64rVrWrXs
r#<00>update_http_web_firewallz%GoEdgeClient.update_http_web_firewallNs<><00><00><12>j<EFBFBD>j<EFBFBD>@<40>A<><03>(.<2E><04>U<EFBFBD> <0B>'<<3C> <0C> <10>Y<EFBFBD>9=<3D>3<EFBFBD>y<EFBFBD>><3E>0Z<30>L<EFBFBD>,<2C> -<2D><1D>'<27>'<27><04>
<EFBFBD>
<EFBFBD><<3C>(@<40>(G<>(G<><07>(P<>Q<>X<>X<>Y`<60>a<> <0C> +<2B>\<5C>J<><07> E<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> E<01><1E>!?<3F><01>s<EFBFBD>C<>D<> D<><44> E<01>r<EFBFBD>c<00><><00>|jd<01>}d|i} tj||j<00>t j
|<03>t <00><03>}|j<00>|j <00>}|jd<06>}|sy t jtj|<07>jd<07><00>}|S#t$r}td|<05><00><02><00>d}~wwxYw#t$rYywxYw)u2查询 HTTPWeb 配置并返回解析后的 JSON。z(/HTTPWebService/findEnabledHTTPWebConfigr<67>r:u查询HTTPWeb配置失败N<EFBC9A> httpWebJSONr<4E>)rFrGrHr2rIrJrKrrErLrNr<>r<>r<>r<>rR) r!r<>rUrVrWrXr9r<>r<>s r#<00>find_http_web_configz!GoEdgeClient.find_http_web_config]s<><00><00><12>j<EFBFBD>j<EFBFBD>C<>D<><03><1E> <0B>,<2C><07> C<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><12>h<EFBFBD>h<EFBFBD>}<7D>%<25><03><12><17> <18><17>:<3A>:<3A>f<EFBFBD>.<2E>.<2E>s<EFBFBD>3<>:<3A>:<3A>7<EFBFBD>C<>D<>D<EFBFBD><14> <0B><> <20> C<01><1E>!=<3D>a<EFBFBD>S<EFBFBD>A<>B<> B<><42> C<01><><19> <18><17> <18>s)<00>>C<00>
7C"<00> C<03> C<03>C<03>" C.<03>-C.c<00>f<00>|dddd<02>ddiddd<02>ddd<04>d<05>} |j|<01>}||d< |<03>r<>|j |<03>xsi}|j d<08>xs|j d <09>xsi}t |t<00>rt|j d<03><00>nd|dd<t |t<00>r4|j d
<EFBFBD>xs#|j d i<00>j d
<EFBFBD>nd|dd
<|j d <0C>xs|j d <0A>xsi}t |t<00>rt|j d<03><00>nd|d d<|j d<0E>xs(|j d<0F>xs|j d<10>xsi}t |t<00>rt|j d<03><00>nd|dd<t |t<00>rG|j d
<EFBFBD>xs6|j d<11>xs#|j d i<00>j d
<EFBFBD>nd|dd
< |j|<01>}||dd<|<08><>|jd<15>} dt|<08>i}
tj| |j<00>tj |
<EFBFBD>t"<00><17>} | j%<00>| j<00>} | j d<18>} | rl tj&t)j*| <0A>j-d<19><00>}t |t<00>rt|j d<1A><00>nd|dd<|S|S#t$rtjd<07>d}Y<00><03>!wxYw#t$rtjd<12>Y<00><01>awxYw#t$r d|dd<Y|SwxYw#t$rtjd<1B>Y|SwxYw)uT汇总服务器的特性开关状态访问日志、WebSocket、WAF、HTTP/3。Nr<4E>r<>)r(r<>)ryr<><00> accessLog<6F> websocket<65>firewall<6C> sslPolicyr<79>zfind webId failedr<64><00> accessLogRefr<66>r<>r<><00> websocketRefr<66><00> firewallRefr<66><00>firewallPolicyIdzparse httpWeb config failedr<64>r(z,/SSLPolicyService/findEnabledSSLPolicyConfigr<67>r:<00> sslPolicyJSONr<4E>r<>zquery sslPolicy/http3 failed)r<>rR<00>logger<65> exceptionr<6E>rNr<>r<>r<>r<>rFrMrGrHr2rIrJrKrLr<>r<>r<>r<>)r!r<00>statusr<73><00>web_conf<6E>al<61>ws<77>fw<66>ssl_idrUrVrWr9r<>r<>s r#<00>get_server_feature_statusz&GoEdgeClient.get_server_feature_statusps<><00><00>"<22><19>"&<26>D<EFBFBD>9<> <20>$<24><1E>!%<25>4<EFBFBD>8<> $<24>d<EFBFBD>;<3B> "
<EFBFBD><06> <1A><19>,<2C>,<2C>Y<EFBFBD>7<>F<EFBFBD>$<24>F<EFBFBD>7<EFBFBD>O<EFBFBD>
 <<3C><15><1F>4<>4<>V<EFBFBD><<3C>B<><02><08><1D>\<5C>\<5C>+<2B>.<2E>T<>(<28>,<2C>,<2C>~<7E>2N<32>T<>RT<52><02>FP<46>QS<51>UY<55>FZ<46>d<EFBFBD>2<EFBFBD>6<EFBFBD>6<EFBFBD>&<26>><3E>.B<>`d<><06>{<7B>#<23>F<EFBFBD>+<2B>u<75>AC<02>EI<02>vJ<02>2<EFBFBD>6<EFBFBD>6<EFBFBD>*<2A>3E<33>3p<33><12><16><16>P[<5B>]_<>I`<60>Id<49>Id<49>eo<65>Ip<49>PT<02><06>{<7B>#<23>J<EFBFBD>/<2F><1D>\<5C>\<5C>+<2B>.<2E>T<>(<28>,<2C>,<2C>~<7E>2N<32>T<>RT<52><02>FP<46>QS<51>UY<55>FZ<46>d<EFBFBD>2<EFBFBD>6<EFBFBD>6<EFBFBD>&<26>><3E>.B<>`d<><06>{<7B>#<23>F<EFBFBD>+<2B><1D>\<5C>\<5C>*<2A>-<2D>w<><18><1C><1C>m<EFBFBD>1L<31>w<>PX<50>P\<5C>P\<5C>]p<>Pq<50>w<>uw<75><02>EO<45>PR<50>TX<54>EY<45>T<EFBFBD>"<22>&<26>&<26><16>.<2E>-A<>_c<5F><06>z<EFBFBD>"<22>6<EFBFBD>*<2A>S]<02>^`<02>bf<02>Sg<02>"<22>&<26>&<26><1A>2D<32>3N<02><02><06><06>Oa<4F>Hb<48>3N<02>fh<66>fl<66>fl<66>mx<6D>z|<7C>f}<7D>gB<02>gB<02>CM<02>gN<02>mq<02><06>z<EFBFBD>"<22>:<3A>.<2E> =<3D><19>3<>3<>I<EFBFBD>><3E>F<EFBFBD>(.<2E>F<EFBFBD>;<3B> <1F><04> %<25><15>!<21><1A>j<EFBFBD>j<EFBFBD>!O<>P<><03>(<28>#<23>f<EFBFBD>+<2B>6<><07><1F>}<7D>}<7D>S<EFBFBD>$<24>-<2D>-<2D>/<2F><04>
<EFBFBD>
<EFBFBD>SZ<EFBFBD>H[<5B>et<65>u<><04><14>%<25>%<25>'<27><1B>y<EFBFBD>y<EFBFBD>{<7B><04><1A>h<EFBFBD>h<EFBFBD><EFBFBD>/<2F><03><16>C<01>#<23>z<EFBFBD>z<EFBFBD>&<26>*:<3A>*:<3A>3<EFBFBD>*?<3F>*F<>*F<>w<EFBFBD>*O<>P<><04>`j<>ko<6B>qu<71>`v<>d<EFBFBD>4<EFBFBD>8<EFBFBD>8<EFBFBD>N<EFBFBD>C[<5B>>\<5C>}A<02><06>{<7B>+<2B>N<EFBFBD>;<3B>
<16> <0A>v<EFBFBD> <0A><>O<19> <1A> <12> <1C> <1C>0<> 1<><19>F<EFBFBD> <1A><>$<19> <<3C> <12> <1C> <1C>:<3A> ;<3B> <<3C><>"%<25>C<01>>B<><06>{<7B>+<2B>N<EFBFBD>;<3B><16> <0A> C<01><><18> =<3D> <12> <1C> <1C>;<3B> <<3C><15> <0A> =<3D>sU<00>L*<00>G$M<00>B*N<00>=A)M6<00>* M<03> M<03>M3<03>2M3<03>6N <03>N<00>
N <03> N<00>N0<03>/N0c<00><><00>|jd<01>}dt|<01>i} tj||j <00>t j |<03>t<00><03>}|j<00>|j <00>}|jd<06>xs|jd<07>}t|xr$|jd<08>xs|jd <09><00>S#t$r}td|<05><00><02><00>d}~wwxYw)
u.校验访问日志策略是否存在/启用。z3/HTTPAccessLogPolicyService/findHTTPAccessLogPolicy<63>httpAccessLogPolicyIdr:u!查询访问日志策略失败N<EFBC9A>httpAccessLogPolicy<63>policyr(r<><00> rFrMrGrHr2rIrJrKrrErLrNr<><00>r!r<>rUrVrWrXr9r<>s r#<00>check_access_log_policy_existsz+GoEdgeClient.check_access_log_policy_exists<74>s<><00><00><12>j<EFBFBD>j<EFBFBD>N<>O<><03>*<2A>C<EFBFBD> <09>N<EFBFBD>;<3B><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><15><18><18>/<2F>0<>F<>D<EFBFBD>H<EFBFBD>H<EFBFBD>X<EFBFBD>4F<34><06><13>F<EFBFBD>K<><06>
<EFBFBD>
<EFBFBD>4<EFBFBD> 0<> J<>F<EFBFBD>J<EFBFBD>J<EFBFBD>z<EFBFBD>4J<34>L<>L<><4C>  <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01><><00>>C<00> C/<03>C*<03>*C/c<00><><00>|jd<01>}dt|<01>i} tj||j <00>t j |<03>t<00><03>}|j<00>|j <00>}|jd<06>xs|jd<07>}t|xr$|jd<08>xs|jd <09><00>S#t$r}td|<05><00><02><00>d}~wwxYw)
u+校验防火墙策略是否存在/启用。z8/HTTPFirewallPolicyService/findEnabledHTTPFirewallPolicy<63>httpFirewallPolicyIdr:u查询防火墙策略失败N<EFBC9A>httpFirewallPolicyr<79>r(r<>r<>r<>s r#<00>check_firewall_policy_existsz)GoEdgeClient.check_firewall_policy_exists<74>s<><00><00><12>j<EFBFBD>j<EFBFBD>S<>T<><03>)<29>3<EFBFBD>y<EFBFBD>><3E>:<3A><07> E<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><15><18><18>.<2E>/<2F>E<>4<EFBFBD>8<EFBFBD>8<EFBFBD>H<EFBFBD>3E<33><06><13>F<EFBFBD>K<><06>
<EFBFBD>
<EFBFBD>4<EFBFBD> 0<> J<>F<EFBFBD>J<EFBFBD>J<EFBFBD>z<EFBFBD>4J<34>L<>L<><4C>  <20> E<01><1E>!?<3F><01>s<EFBFBD>C<>D<> D<><44> E<01>r<EFBFBD><00>
cache_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)Nz"/HTTPWebService/updateHTTPWebCacher<65>)r<><00> cacheJSONr:u更新缓存配置失败<E8B4A5>rFr<>r<>rIrJr<>r<>rGrHr2rKrrErL)r!r<>r<>rU<00> cache_b64rVrWrXs r#<00>update_http_web_cachez"GoEdgeClient.update_http_web_cache<68>s<><00><00><12>j<EFBFBD>j<EFBFBD>=<3D>><3E><03><1A>$<24>$<24>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>
<EFBFBD>%;<3B>%B<>%B<>7<EFBFBD>%K<>L<>S<>S<>T[<5B>\<5C> <09> +<2B>)<29>D<><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01><><00>>B-<00>- C <03>6C<03>C <03>locations_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)Nz&/HTTPWebService/updateHTTPWebLocationsr<73>)r<><00> locationsJSONr:u更新路径规则失败r<EFBC9A>)r!r<>r<>rU<00> locations_b64rVrWrXs r#<00>update_http_web_locationsz&GoEdgeClient.update_http_web_locations<6E>s<><00><00><12>j<EFBFBD>j<EFBFBD>A<>B<><03><1E>(<28>(<28><14><1A><1A>N<EFBFBD>)C<>)J<>)J<>7<EFBFBD>)S<>T<>[<5B>[<5B>\c<>d<> <0A> +<2B>m<EFBFBD>L<><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01>r<EFBFBD><00> rewrite_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)Nz)/HTTPWebService/updateHTTPWebRewriteRulesr<73>)r<><00>rewriteRulesJSONr:u更新重写规则失败r<EFBC9A>)r!r<>rrU<00> rewrite_b64rVrWrXs r#<00>update_http_web_rewrite_rulesz*GoEdgeClient.update_http_web_rewrite_rules<65>s<><00><00><12>j<EFBFBD>j<EFBFBD>D<>E<><03><1C>&<26>&<26>t<EFBFBD>z<EFBFBD>z<EFBFBD>,<2C>'?<3F>'F<>'F<>w<EFBFBD>'O<>P<>W<>W<>X_<58>`<60> <0B> +<2B><1B>M<><07> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01>r<EFBFBD><00> redirect_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)Nz,/HTTPWebService/updateHTTPWebRedirectToHTTPSr<53>)r<><00>redirectToHTTPSJSONr:u更新HTTPS跳转失败r<EFBC9A>)r!r<>rrUr<>rVrWrXs r#<00>!update_http_web_redirect_to_httpsz.GoEdgeClient.update_http_web_redirect_to_https<70>s<><00><00><12>j<EFBFBD>j<EFBFBD>G<>H<><03><14><1E><1E>t<EFBFBD>z<EFBFBD>z<EFBFBD>-<2D>8<>?<3F>?<3F><07>H<>I<>P<>P<>QX<51>Y<><03> +<2B>C<EFBFBD>H<><07> A<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> A<01><1E>!;<3B>A<EFBFBD>3<EFBFBD>?<3F>@<40> @<40><> A<01>r<EFBFBD><00> referers_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>y#t$r}td|<07><00><02><00>d}~wwxYw)Nz%/HTTPWebService/updateHTTPWebReferersr<73>)r<><00> referersJSONr:u更新防盗链配置失败r<EFBC9A>)r!r<>r rUr<>rVrWrXs r#<00>update_http_web_referersz%GoEdgeClient.update_http_web_referers<72>s<><00><00><12>j<EFBFBD>j<EFBFBD>@<40>A<><03><14><1E><1E>t<EFBFBD>z<EFBFBD>z<EFBFBD>-<2D>8<>?<3F>?<3F><07>H<>I<>P<>P<>QX<51>Y<><03> +<2B>S<EFBFBD>A<><07> E<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><> <20> E<01><1E>!?<3F><01>s<EFBFBD>C<>D<> D<><44> E<01>r<EFBFBD><00>remote_addr_confc<00><><00>|jd<01>}tjtj|<02>j d<02><00>j d<02>}||d<03>} tj||j<00>tj|<05>t<00><04>}|j<00>
request_id<EFBFBD> partitionc <00>P<00>|jd<01>} t|<01>t|<03>d<02>} |r|| d<|r|| d<|r|| d<|rd| d<|r|| d<|r|| d <| r| | d
<|
<EFBFBD>t|
<EFBFBD>| d < tj| |j <00>t j | <0C>t<00> <0C>} | j<00>| j <00>}|jd<0E>xsg|jd
<EFBFBD>t|jd<0F><00>d<10>S#t$r}td |<0E><00><02><00>d}~wwxYw)Nz(/HTTPAccessLogService/listHTTPAccessLogs)ryrr<00>hourFrom<6F>hourToTrrr<00> requestIdr!r:u查询访问日志失败<E8B4A5>httpAccessLogs<67>hasMore)<03>logsr%r'r<>)r!rrrrrrrrr r!rUrVrWrXr9s r#<00>list_http_access_logsz"GoEdgeClient.list_http_access_logss:<00><00><13>j<EFBFBD>j<EFBFBD>C<>D<><03><1B>I<EFBFBD><0E><17><04>I<EFBFBD>#
<EFBFBD><07> <0F> <20>G<EFBFBD>E<EFBFBD>N<EFBFBD> <14>"+<2B>G<EFBFBD>J<EFBFBD> <1F> <12> '<27>G<EFBFBD>H<EFBFBD> <1D> <12>!%<25>G<EFBFBD>I<EFBFBD> <1E> <0A><1E>G<EFBFBD>D<EFBFBD>M<EFBFBD> <12>!(<28>G<EFBFBD>I<EFBFBD> <1E> <15>#-<2D>G<EFBFBD>K<EFBFBD> <20> <14> <20>#&<26>y<EFBFBD>><3E>G<EFBFBD>K<EFBFBD> <20> B<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><18>H<EFBFBD>H<EFBFBD>-<2D>.<2E>4<>"<22><1D><18><18>+<2B>.<2E><1B>D<EFBFBD>H<EFBFBD>H<EFBFBD>Y<EFBFBD>/<2F>0<>
<EFBFBD>
<EFBFBD><EFBFBD>  <20> B<01><1E>!<<3C>Q<EFBFBD>C<EFBFBD>@<40>A<> A<><41> B<01>s<00>+>D <00> D%<03>D <03> D%c<00>~<00>|jd<01>}d|i} tj||j<00>t j
|<03>t <00><03>}|j<00>|j <00>}|jd<05>xsg|jd<06>xsgd<07>S#t$r}td|<05><00><02><00>d}~wwxYw)Nz1/HTTPAccessLogService/findHTTPAccessLogPartitionsrr:u!查询访问日志分区失败<E8B4A5>
partitions<EFBFBD>reversePartitions)r+r,r<>)r!rrUrVrWrXr9s r#<00>find_http_access_log_partitionsz,GoEdgeClient.find_http_access_log_partitions?s<><00><00><12>j<EFBFBD>j<EFBFBD>L<>M<><03><18>#<23>,<2C><07> H<01><1B>=<3D>=<3D><13>d<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>w<EFBFBD>DW<44>ap<61>q<>D<EFBFBD> <0A><1D><1D><1F><13>y<EFBFBD>y<EFBFBD>{<7B><04><1E>(<28>(<28><<3C>0<>6<>B<EFBFBD>!%<25><18><18>*=<3D>!><3E>!D<>"<22>
<EFBFBD>
<EFBFBD><EFBFBD>  <20> H<01><1E>!B<>1<EFBFBD>#<23>F<>G<> G<><47> H<01>s<00>>B <00> B<<03>)B7<03>7B<<03>max_pages_per_partitionc <00>(<00>|s#tj<00>jd<01>}g} |j|<02>}|j d<02>xsg}i} ddddd<04>}
|D<00>]E} d} d} | |ks<01>| dz } |j |||||d| | <0B>| nd<00><07>}|j d<08>xsg}|D]<5D>}t|t<00>rt|j d <09><00>nd}|s<01>2 t|<11>}| j |d<03>dz| |<d
|cxkrd krnn|
d xxdz cc<<00>rd |cxkrdkrnn|
dxxdz cc<<00><>d|cxkrdkrnn|
dxxdz cc<<00><>d|cxkrdks<01><>n<00><>|
dxxdz cc<<00><>|j d<16>} t|j d<17><00>}|s<02><01>?| |kr<02><01>8<EFBFBD><01>Ht| j<00><00>}t| j<00>d<18><00><19>dd}||
|d<1B>S#t
$rdg}Y<00><01><>wxYw#t
$rY<00><01><>wxYw#t
$rY<00><01>nwxYw)Nz%Y%m%dr+r)<04>2xx<78>3xx<78>4xx<78>5xxr
F)rrrrrrr r!r(r<>r>i+r0i,i<>r1i<>i<>r2r=iWr3r%r'c<00><00>|d S)Nr
<00>)<01>xs r#<00><lambda>z5GoEdgeClient.aggregate_status_codes.<locals>.<lambda><3E>s
<00><00>A<EFBFBD>a<EFBFBD>D<EFBFBD>5r%)<01>key<65>
)<03>total<61>bins<6E>top)r rD<00>strftimer-rNrRr)r<>r<><00>strrMr<><00>sum<75>values<65>sorted<65>items)r!rrrrrr.<00>parts<74>part_res<65>countsr;rf<00>req_id<69>pages<65>resr(<00>itemr<<00>c<>has_morer:r<s r#<00>aggregate_status_codesz#GoEdgeClient.aggregate_status_codesMs:<00><00><13><1A>,<2C>,<2C>.<2E>)<29>)<29>(<28>3<>C<EFBFBD><12><05> <1B><1B>;<3B>;<3B>C<EFBFBD>@<40>H<EFBFBD><1C>L<EFBFBD>L<EFBFBD><1C>.<2E>4<>"<22>E<EFBFBD>"$<24><06>'(<28><11>1<EFBFBD>Q<EFBFBD>G<><04><16>A<EFBFBD><19>F<EFBFBD><15>E<EFBFBD><17>1<>1<><15><11>
<EFBFBD><05> <1A><1E>4<>4<>"+<2B><1F>!<21>"+<2B> '<27> %<25>#)<29>()<29> <0A>1<EFBFBD>4<EFBFBD>5<> <16>C<EFBFBD><1B>w<EFBFBD>w<EFBFBD>v<EFBFBD><EFBFBD>,<2C>"<22><04> <20>D<EFBFBD>6@<40><14>t<EFBFBD>6L<36>3<EFBFBD>t<EFBFBD>x<EFBFBD>x<EFBFBD><08>1<>2<>RV<52>D<EFBFBD><1F> <20>!<21><1F><04>I<EFBFBD><01>$*<2A>:<3A>:<3A>d<EFBFBD>A<EFBFBD>#6<><11>#:<3A>F<EFBFBD>4<EFBFBD>L<EFBFBD><1A>a<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><1C>U<EFBFBD> <0B>q<EFBFBD>(<28> <0B><1C><01><1F>S<EFBFBD><1F><1C>U<EFBFBD> <0B>q<EFBFBD>(<28> <0B><1C><01><1F>S<EFBFBD><1F><1C>U<EFBFBD> <0B>q<EFBFBD>(<28> <0B><1C><01><1F>S<EFBFBD><1F><1C>U<EFBFBD> <0B>q<EFBFBD>(<28> <0B>!!<21>"<1D><17><17><1B>-<2D><06><1F><03><07><07> <09> 2<>3<><08><1F><19>I<18>1<>1<><17>P<14>F<EFBFBD>M<EFBFBD>M<EFBFBD>O<EFBFBD>$<24><05><14>V<EFBFBD>\<5C>\<5C>^<5E><1F>9<>#<23>2<EFBFBD>><3E><03><1E><04>S<EFBFBD>9<>9<><39>]<19> <1B><19>F<EFBFBD>E<EFBFBD> <1B><>(!<21><1A><19><1A><>%<25>!<21> <20>!<21>s5<00>&G!<00>.G4<02> H<04>! G1<03>0G1<03>4 H<05>H<05> H<07>H)r&N)rFrN)rrN)r
)<01>)r
<00>avg)N) N<>2NNFNNNN)NNNi<4E>r>)-<2D>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r$<00> staticmethodr rrr>r2r0rFr rrMr<>rr<>rr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rrr rrrr)r-rLr5r%r#rrsG<00><00><08>"<22><12><18>><3E><18><12><18>
<EFBFBD>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>
<EFBFBD>'<15>s<EFBFBD>'<15>RD<01>#<23>D<01>#<23>D<01>r<01>,<19>!&<26> <20>,0<>*<1E><15>c<EFBFBD><19>*<1E><1B>3<EFBFBD>i<EFBFBD>*<1E><15> *<1E>
<1F> *<1E> <1D> *<1E><1F>t<EFBFBD>C<EFBFBD>y<EFBFBD>)<29>*<1E>
<0A>*<1E>b<19> <20>04<30>1<1E><11>1<1E><16>c<EFBFBD><19>1<1E>!<21><13>c<EFBFBD><18>N<EFBFBD> 1<1E>
<15> 1<1E> <1D> 1<1E>#<23>4<EFBFBD><03>9<EFBFBD>-<2D>1<1E>
<0A>1<1E>f %<25><03> %<25>3<EFBFBD> %<25>t<EFBFBD>TX<54>Y\<5C>^a<>Ya<59>Tb<54>Oc<4F> %<25> %<25><13> %<25>S<EFBFBD> %<25>RV<52>W[<5B>\_<>ad<61>\d<>We<57>Rf<52> %<25> %<25>C<EFBFBD> %<25>s<EFBFBD> %<25>c<EFBFBD> %<25>^b<>cg<63>hk<68>mp<6D>hp<68>cq<63>^r<> %<25><18>C<EFBFBD><18>H<EFBFBD>S<EFBFBD>M<EFBFBD><18>4  <20>c<EFBFBD>  <20>$<24>  <20>S[<5B>\_<>S`<60>  <20>lp<6C>  <20>  <20>S<EFBFBD>  <20><14>  <20>$<24>  <20><18>3<EFBFBD><18>8<EFBFBD>C<EFBFBD>=<3D><18>: <20>S<EFBFBD> <20>4<EFBFBD> <20>D<EFBFBD> <20>  <20>C<EFBFBD>  <20><04>  <20>QY<51>Z]<5D>Q^<5E>  <20>jn<6A>  <20><14><03><14><08><14>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>8P<38><14>&5<16>3<EFBFBD>5<16>4<EFBFBD><03>S<EFBFBD><08>><3E>5<16>n M<01><03> M<01><04> M<01> M<01>c<EFBFBD> M<01>d<EFBFBD> M<01> <20><13> <20>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E> <20>UY<55> <20> <20>S<EFBFBD> <20>$<24>s<EFBFBD>TW<54>x<EFBFBD>.<2E> <20>]a<> <20> <20><13> <20>D<EFBFBD>QT<51>VY<56>QY<51>N<EFBFBD> <20>_c<5F> <20> <20>S<EFBFBD> <20>QU<51>VY<56>[^<5E>V^<5E>Q_<51> <20>dh<64> <20> <20>C<EFBFBD> <20><04>S<EFBFBD>RU<52>X<EFBFBD><0E> <20>[_<> <20> <20>s<EFBFBD> <20>d<EFBFBD>SV<53>X[<5B>S[<5B>n<EFBFBD> <20>ae<61> <20> <20>C<EFBFBD> <20><04>S<EFBFBD>RU<52>X<EFBFBD><0E> <20>[_<> <20> <20><13> <20>RV<52>WZ<57>\_<>W_<57>R`<60> <20>ei<65> <20>"<22><16>#'<27>!%<25><1D> <20>!%<25>$(<28>#'<27>,
<EFBFBD><16>,
<EFBFBD><16>c<EFBFBD>]<5D>,
<EFBFBD><12> ,
<EFBFBD>
<1C>C<EFBFBD>=<3D> ,
<EFBFBD> <1A>#<23><1D> ,
<EFBFBD><16>,
<EFBFBD> <15>S<EFBFBD>M<EFBFBD>,
<EFBFBD><1A>#<23><1D>,
<EFBFBD><1D>S<EFBFBD>M<EFBFBD>,
<EFBFBD><1C>C<EFBFBD>=<3D>,
<EFBFBD>
<0E>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>,
<EFBFBD>\ 
<EFBFBD>3<EFBFBD> 
<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E> 
<EFBFBD>""<22>#'<27>!%<25><18>'*<2A>=:<3A><16>=:<3A><16>c<EFBFBD>]<5D>=:<3A><1C>C<EFBFBD>=<3D> =:<3A>
<1A>#<23><1D> =:<3A> <12> =:<3A>"%<25>=:<3A>
<0E>c<EFBFBD>3<EFBFBD>h<EFBFBD><1E>=:r%r)r<>rOrI<00>loggingr<00>typingrrrrrG<00> urllib.parserr<00> django.utilsr <00>modelsr <00> getLoggerrPr<>rKr<00>__all__r5r%r#<00><module>r\sY<00><01> <0A><0F> <0B><0E> <09>,<2C>,<2C><0F>!<21>%<25>!<21>"<22>
<1B><17> <1A> <1A>8<EFBFBD> $<24><06><19><0F>v :<3A>v :<3A>r <1A>
<1A>r%