PHP向Roblox API发送POST请求获取x-csrf-token的实现方法
错误原因
- 你把
.ROBLOSECURITY身份凭证序列化为JSON放到POST请求体发送是错误的,Roblox需要从请求的Cookie头中读取该凭证,而非请求体。 - 原cURL配置没有开启响应头返回,无法读取
x-csrf-token字段。 - 额外说明:调用
https://auth.roblox.com/v2/logout接口时,第一次请求本身就会因为未携带csrf返回报错,这是预期行为,和你Python实现的逻辑一致,我们只需要从响应头中提取csrf即可,无需处理响应体的错误内容。
修复后的完整代码
<?php // 从入参获取.ROBLOSECURITY cookie值 $robloxCookie = $_POST["input"]; function getRobloxCsrf(string $cookie) { $ch = curl_init("https://auth.roblox.com/v2/logout"); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_ENCODING, 'identity'); // 开启响应头返回 curl_setopt($ch, CURLOPT_HEADER, true); // 配置Cookie头,传入.ROBLOSECURITY curl_setopt($ch, CURLOPT_COOKIE, ".ROBLOSECURITY=" . $cookie); // 该接口不需要POST参数,空POST请求即可 curl_setopt($ch, CURLOPT_POST, true); $response = curl_exec($ch); if (curl_error($ch)) { trigger_error('Curl Error:' . curl_error($ch)); } // 拆分响应头和响应体 $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize); curl_close($ch); // 从响应头匹配x-csrf-token值 if (preg_match('/x-csrf-token: (.*)/i', $headers, $matches)) { return trim($matches[1]); } return false; } // 调用方法获取csrf $csrf = getRobloxCsrf($robloxCookie); if ($csrf) { echo "获取到的x-csrf-token:" . $csrf; } else { echo "获取失败,请检查.ROBLOSECURITY是否有效"; } ?>
验证说明
你可以直接打印返回的$csrf变量验证是否正确获取,获取到的token即可用于后续其他Roblox API的请求。
内容的提问来源于stack exchange,提问作者UnknownEncoder
相关产品推荐
相关产品推荐

