使用PHP file_get_contents调用Polltab API与Postman结果不一致求助
问题排查与解决方案
我注意到你遇到的核心问题是Postman调用Polltab的/api/poll/create接口正常,但自行编写的PHP脚本返回结果不符,这大概率是请求体格式与接口预期不匹配导致的,下面来具体分析和解决:
问题根源分析
Postman在发送这类结构化请求时,默认会使用JSON格式作为请求体,并自动设置请求头Content-Type: application/json;而你的PHP脚本用http_build_query生成的是application/x-www-form-urlencoded格式的表单数据——这两种格式对于后端接口来说是完全不同的解析逻辑,Polltab的这个API应该只接受JSON格式的请求体,所以才会返回异常结果。
修正后的PHP脚本
把请求体改为JSON格式,同时添加正确的请求头:
<?php // 构造原始数据数组 $data = array ( 'question' => 'this is questions', 'questionMedia' => '', 'choices' => array ( 0 => array ('text' => '123123123'), 1 => array ('text' => 'qweqweqwe'), 2 => array ('text' => 'asdasdasd'), 3 => array ('text' => 'zxczxczxcxc'), ), 'allowMultiChoice' => false, 'endDate' => NULL, 'enableCaptcha' => false, 'hideResults' => false, 'restriction' => 'ip', ); // 转换为JSON格式的请求体 $postdata = json_encode($data); // 配置请求选项,重点添加JSON格式的Content-Type头 $opts = array('http' => array( 'method' => 'POST', 'content' => $postdata, 'header' => implode("\r\n", [ 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36', 'Content-Type: application/json', 'Content-Length: ' . strlen($postdata) // 可选,但能帮助后端更准确处理请求 ]) ) ); $context = stream_context_create($opts); $result = file_get_contents('https://www.polltab.com/api/poll/create', false, $context); echo $result; ?>
额外注意事项
json_encode会自动将PHP的NULL转为JSON格式的null,符合接口对endDate字段的要求;- 如果遇到SSL证书验证失败的错误,可以在
http选项中临时添加'verify_peer' => false, 'verify_peer_name' => false(仅测试环境使用,生产环境建议配置合法的证书信任链)。
内容的提问来源于stack exchange,提问作者Ronald J
相关产品推荐
相关产品推荐

