You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions调用cPanel托管Flask API遇人机验证问题求助

问题分析与解决方案

问题本质

这个问题不是Azure Functions特有,核心原因是cPanel托管的服务器把Azure Functions的出站IP识别为机器人/自动化请求,触发了反爬/人机验证机制,导致请求被拦截在Flask API之前——返回的200状态码只是验证页面的正常响应,而非你的API端点返回的结果。本地请求正常是因为你的本地IP不在拦截列表中,且请求头更贴近正常浏览器的特征。

解决方法

1. 将Azure Functions出站IP加入cPanel白名单

  • 先获取Azure Functions的出站IP:登录Azure门户,进入你的函数应用,在左侧菜单网络->出站IP地址中查看所有固定出站IP(如果是消费计划,出站IP是动态的,建议升级到高级/专用计划使用固定IP,否则白名单需要定期更新)。
  • 登录cPanel后台,找到安全相关设置(比如IP Blocker的允许列表、ModSecurity的规则例外),将这些IP全部添加进去,允许其访问服务器。
  • 如果你的cPanel站点搭配了Cloudflare等CDN,还要在CDN的安全规则中把Azure的出站IP加入白名单,或者创建专属规则允许来自这些IP的请求。

2. 修改请求头,模拟正常浏览器请求

默认requests库的User-Agent是python-requests/x.x.x,极易被识别为自动化工具。修改请求头,添加符合浏览器格式的标识:

import requests
import logging

headers = {
    "THIS":"XXXXXXX",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Accept": "application/json, text/plain, */*"
}
job_data = {
      "number": 151, 
      "records":[
          {"row_id":15, "content":"my-1-content-is-here"}, 
          {"row_id":16, "content":"my-2-content-is-here"}
      ]
    }

job_request = requests.post("https://cPanel-flask-hosted-api.net/my-jobs/", headers=headers , json =job_data)

if job_request.status_code == 200:
     logging.info('Job submitted successfully!')
     logging.info(f'{job_request.text}')

3. 关闭cPanel针对API端点的人机验证

如果你的Flask API仅用于服务间调用,无需面向普通用户,可以在cPanel后台关闭相关的人机验证服务(比如reCAPTCHA集成),或者配置规则让/my-jobs/这个端点直接跳过验证流程。

4. 使用Azure Functions专用出站IP(可选)

若当前使用的是消费计划,动态出站IP会增加白名单维护成本。可以升级到高级计划(Premium Plan)或专用计划(Dedicated Plan),配置固定出站IP,只需一次性将固定IP加入白名单即可。

内容的提问来源于stack exchange,提问作者Hakuna N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:16:02