PHP foreach循环中执行CURL POST请求返回403错误问题求助
核心问题原因
$requestHeader数组未在循环内初始化,每次循环都会向同一个数组追加相同的authtoken请求头,导致多次循环后请求携带多个重复的身份校验头,触发服务端安全策略返回403。
修复方案
1. 循环内初始化请求头数组
每次循环执行前重置请求头数组,避免重复追加头信息,修改后代码如下:
<?php foreach( $postdata AS $item ) { // 关键修改:每次循环重新初始化请求头数组 $requestHeader = []; $url = "https://example.com/api/endpoint"; $requestHeader[] = "authtoken: 123456789"; $fields_string = http_build_query($item); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER,$requestHeader); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); $result = curl_exec($ch); echo $result; curl_close($ch); }
2. 其他排查方向
如果修改后依然报错,可按以下步骤排查:
- 对比循环内
$item和测试用$test数组的字段、字段值是否完全一致,避免参数错误触发接口校验 - 检查是否触发接口频率限制:短时间批量请求可能被服务端拦截,可在每次请求后加
sleep(1)验证 - 开启curl调试模式查看实际请求内容,添加
curl_setopt($ch, CURLOPT_VERBOSE, true);打印请求头、参数等信息,和正常请求对比差异
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

