php http_build_query 导致的接口访问异常

背景:访问远程接口,使用了http_build_query 来组织请求参数,并通过crul发送请求并获得结果。

$urlparams = array();
$urlparams['id']=$this->id;
$urlparams['ctype']=$ctype;
$requestUrl = $urlHead.'?'.http_build_query($urlparams)
$resu = $this->_fetchUrl($requestUrl);
这样看上去不错,echo出来也正常,浏览器访问也ok,然后继续....
/**
 * 发送请求
 */
private function _fetchUrl($url)
	{
		//初始化 curl
		$ch = curl_init();
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_REFERER,"");
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
		$html =  curl_exec($ch);
		
		curl_close($ch);
		return $html;
	}

问题:接口异常了,说丢失了参数,检查请求的url,一切正常~~ 

排查:通过httpwatch,检查发送出去的请求,发现中间的 & 符号被转移成了& ok,问题解决

要调用腾讯云的RESTful API接口,可以使用PHP的cURL函数库来发送HTTP请求。以下是基本的步骤: 1. 获取腾讯云API密钥:在腾讯云控制台中,进入“访问管理 > API密钥管理”页面,创建一个API密钥,并记录下SecretId和SecretKey。 2. 构建HTTP请求:根据腾讯云API文档,构建符合要求的HTTP请求,包括请求方法、请求URL、请求头、请求参数等信息。同时,需要对请求参数进行签名,以保证请求的安全性。 3. 发送HTTP请求:使用PHP的cURL函数库,发送构建好的HTTP请求,并获取返回结果。 以下是一个简单的示例代码,用于查询腾讯云CVM(云服务器)的实例列表: ```php <?php // 腾讯云API密钥 $secretId = "your_secret_id"; $secretKey = "your_secret_key"; // 构建HTTP请求 $method = "GET"; $host = "cvm.tencentcloudapi.com"; $path = "/v2/index.php"; $params = array( "Action" => "DescribeInstances", "Version" => "2017-03-12", "Region" => "ap-guangzhou", "Limit" => "10", "Offset" => "0", ); $signature = sign($params, $secretKey); $url = "https://{$host}{$path}?" . http_build_query($params) . "&Signature={$signature}"; // 发送HTTP请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); // 输出返回结果 echo $result; /** * 对请求参数进行签名 */ function sign($params, $secretKey) { ksort($params); $str = ""; foreach ($params as $key => $value) { $str .= "{$key}={$value}&"; } $str = rtrim($str, "&"); $signStr = "GET{$str}"; $sign = base64_encode(hash_hmac("sha1", $signStr, $secretKey, true)); return urlencode($sign); } ?> ``` 在实际应用中,可能需要根据具体的业务需求,对上述代码进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值