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

迁移至SSL后$_SERVER['REQUEST_METHOD']异常及CURL调用API报错求助

解决SSL迁移后CURL调用同服务器API的301及REQUEST_METHOD异常问题

嘿,我来帮你捋清楚这个问题的来龙去脉,然后给你靠谱的解决方案~

首先咱们先拆解你遇到的两个核心问题:

  • 一开始调用API返回301重定向错误
  • 加了curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);后,又因为$_SERVER['REQUEST_METHOD']变了报错

为啥会出现这些问题?

  1. 301错误的根源:网站迁移到SSL后,服务器大概率配置了强制HTTP转HTTPS的规则(比如Apache的.htaccess或者Nginx的重写规则),你用HTTP的URL调用自然会被重定向到HTTPS,所以返回301。
  2. REQUEST_METHOD变了的原因:HTTP规范里有个默认行为——当CURL跟随301/302重定向时,会把POST请求自动转换成GET请求。如果你的API接口只接受POST请求,那$_SERVER['REQUEST_METHOD']变成GET后,接口肯定会报错。

具体怎么解决?

方案1:直接用HTTPS URL调用(最推荐,一劳永逸)

既然网站已经全量SSL了,直接把CURL的目标URL改成HTTPS的,从根源上避免301重定向:

// 把URL改成HTTPS的
$url = 'https://news.hubsdev.com/administrator/index.php?option=com_api&task=acymailing.listcreate';
$ch = curl_init($url);

// 如果你原本是POST请求,保留这个配置
curl_setopt($ch, CURLOPT_POST, true);
// 这里可以添加你的POST数据(如果有的话)
// curl_setopt($ch, CURLOPT_POSTFIELDS, $yourPostData);

// 执行请求并处理结果
$response = curl_exec($ch);
curl_close($ch);

这样就不需要开启CURLOPT_FOLLOWLOCATION,自然也不会出现请求方法被转换的问题。

方案2:临时应急(不推荐长期用)

如果暂时没法修改URL,那可以在开启重定向跟随的同时,强制CURL保留原请求方法:

$url = 'http://news.hubsdev.com/administrator/index.php?option=com_api&task=acymailing.listcreate';
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);
// 关键:强制使用POST方法,即使重定向也不改成GET
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

// 其他必要配置,比如POST数据、SSL验证(如果是自签名证书可能需要关闭,但生产环境别这么做)
// curl_setopt($ch, CURLOPT_POSTFIELDS, $yourPostData);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($ch);
curl_close($ch);

这个方案只是临时 workaround,长期来看还是建议直接用HTTPS URL,更符合SSL迁移后的架构。

额外要检查的点

  • 看看服务器的重写规则:确认是不是真的有HTTP转HTTPS的强制规则,这是301的直接诱因。
  • 验证API接口的要求:确认你的API是不是只接受POST请求,如果是,那一定要保证CURL发送的请求方法不被转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:42