如何将Impact Radius的cURL命令转换为PHP代码?
将Impact Radius目录查询API的cURL命令转换为PHP代码
你的原代码存在几个关键问题导致请求失败,下面是修正后的完整PHP代码,同时说明问题点:
原代码的问题:
- 遗漏了
Keyword=Acme查询参数:原cURL的-G参数会把所有-d参数转为GET查询字符串,你只添加了Query参数 - 请求头设置错误:原cURL要求的是
Accept: application/json(告知服务器返回JSON格式响应),但你设置成了Content-Type: application/json(该头用于POST请求声明请求体格式,GET请求无需设置) - 多余设置
CURLOPT_CUSTOMREQUEST, 'GET':curl默认就是GET请求,无需额外指定
修正后的PHP代码:
<?php $accountSID = "xyz"; $authToken = "xyz"; // 构建基础URL $baseUrl = "https://api.impact.com/Mediapartners/{$accountSID}/Catalogs/ItemSearch"; // 构建查询参数数组,对应原cURL的-d参数 $queryParams = [ 'Query' => 'CurrentPrice>=12.00ANDStockAvailability!=OutOfStock', 'Keyword' => 'Acme' ]; // 自动编码参数并拼接到URL后 $url = $baseUrl . '?' . http_build_query($queryParams); // 初始化curl $curl = curl_init($url); // 设置账号认证信息 curl_setopt($curl, CURLOPT_USERPWD, "{$accountSID}:{$authToken}"); // 设置Accept头,要求返回JSON格式 curl_setopt($curl, CURLOPT_HTTPHEADER, ['Accept: application/json']); // 强制使用TLS 1.2协议 curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // 设置连接超时时间 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); // 设置请求的User-Agent curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); // 要求返回结果而非直接输出 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 执行请求 $response = curl_exec($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // 错误处理与响应解析 if ($response === false) { echo "请求错误:" . curl_error($curl); } else { if ($httpCode >= 200 && $httpCode < 300) { // 解析JSON响应为数组 $data = json_decode($response, true); print_r($data); } else { echo "请求失败,状态码:{$httpCode},响应内容:{$response}"; } } // 关闭curl资源 curl_close($curl); ?>
额外说明:
- 使用
http_build_query()构建查询字符串,能自动处理URL编码,避免手动拼接可能出现的格式错误 - 增加HTTP状态码判断,便于排查API返回的错误(比如401代表认证失败,400代表参数格式错误等)
- 用
curl_error()输出错误描述,比仅输出错误码更便于调试
内容的提问来源于stack exchange,提问作者user1871962
相关产品推荐
相关产品推荐

