使用cURL调用phpcodechecker API返回null,参数传递是否有误?
问题分析与修复方案
核心问题
- 未传递
code参数:当前代码既没把code拼进GET请求URL,也没开启POST请求传递参数,导致API接收不到待检查代码。 - 字符串解析错误:原代码用双引号定义
$code,其中的$string会被PHP当作变量解析(未定义时为空),导致传递的代码不符合预期。 - 编码与请求规则不匹配:若用POST方式,未遵循API要求的编码逻辑和参数标识规则。
修复后的代码示例
方案1:GET请求方式
直接将code参数URL编码后拼接在请求URL中:
// 用单引号避免$string被解析,或转义$为\$ $code = ' function test($string){ return $string ; } '; $url = "http://phpcodechecker.com/api/?code=" . urlencode($code); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5'); $data = curl_exec($ch); if (curl_errno($ch)) { print "Error: " . curl_error($ch); exit(); } $json = json_decode($data, true); curl_close($ch); var_dump($json);
方案2:POST请求(带base64编码)
按照API要求先base64编码再URL编码,同时在URL中添加base64参数标识:
$code = ' function test($string){ return $string ; } '; // 先base64编码,再URL编码 $encoded_code = urlencode(base64_encode($code)); $url = "http://phpcodechecker.com/api/?base64"; // 标识传递的是base64编码内容 $post_data = "code=" . $encoded_code; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5'); // 启用POST请求 curl_setopt($ch, CURLOPT_POST, true); // 设置POST请求体 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // 设置正确的Content-Type curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); $data = curl_exec($ch); if (curl_errno($ch)) { print "Error: " . curl_error($ch); exit(); } $json = json_decode($data, true); curl_close($ch); var_dump($json);
关键注意事项
- 字符串定义:定义代码字符串优先用单引号,避免PHP解析
$符号;若用双引号,需将$转义为\$。 - 参数传递:GET请求需把
codeURL编码后拼进URL;POST请求用base64编码时,要在URL加base64参数,且code值需先base64_encode()再urlencode()。 - 请求头设置:POST请求必须设置
Content-Type: application/x-www-form-urlencoded,确保服务器正确解析请求体。
内容的提问来源于stack exchange,提问作者smolo
相关产品推荐
相关产品推荐

