Php 将变量传递给CURLOPT_URL时,Curl返回错误结果
关于curl请求,我有一个线索,当我向CURLOPT_URL参数传递一个变量时,我从响应中得到了坏值,当我硬编码URL curl时,返回了好值:Php 将变量传递给CURLOPT_URL时,Curl返回错误结果,php,curl,Php,Curl,关于curl请求,我有一个线索,当我向CURLOPT_URL参数传递一个变量时,我从响应中得到了坏值,当我硬编码URL curl时,返回了好值: class APi { public $this->url; public $this->token; // :) function __construct($url, $token){ $this->url = $url; $this->token = $token; }
class APi {
public $this->url;
public $this->token; // :)
function __construct($url, $token){
$this->url = $url;
$this->token = $token;
}
function getUsers(){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_PORT => "4000",
CURLOPT_URL => $this->url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"Content-Type: application/x-www-form-urlencoded",
"Postman-Token: 472244a4-af1d-4ca5-b26b-07f6b168c04b",
"x-access-token:" . $this->token
),));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
print_r($response); //<== print bad values when CURLOPT_URL value is a variable
return $response;
}
}
} // end of class api
// Init the class
$data = new Api($url, $token);
print_r($data->getUsers());
类APi{
公共$this->url;
公共$this->token;/:)
函数构造($url,$token){
$this->url=$url;
$this->token=$token;
}
函数getUsers(){
$curl=curl_init();
curl_setopt_数组($curl,数组(
CURLOPT_端口=>“4000”,
CURLOPT_URL=>$this->URL,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_编码=>“”,
CURLOPT_MAXREDIRS=>10,
CULLOPT_超时=>30,
CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST=>“获取”,
CURLOPT_HTTPHEADER=>数组(
“缓存控制:无缓存”,
“内容类型:application/x-www-form-urlencoded”,
“邮递员代币:472244a4-af1d-4ca5-b26b-07f6b168c04b”,
“x-access-token:”.$this->token
),));
$response=curl\u exec($curl);
$err=curl\u error($curl);
curl_close($curl);
如果($err){
echo“cURL Error:”$err;
}否则{
print_r($response);//getUsers());
$this->url是从构造函数初始化的,当我将$this->url的值粘贴到postman时,我得到了很好的结果,但从代码中我得到了不好的结果
有人能帮我吗
多谢各位
====解决方案==============
根据你们中的一些人的建议,我必须对单个参数值进行urlencode编码,这是例外。感谢var_dump提示来比较字符长度。你们是否尝试过用
urlencode()
对url进行编码?var_dump($this->url)
print?@flyzx CURLOPT_url=>urlencode($this->url),返回我“cURL Error#:无法解析主机”324小于344,因此有20个字符需要说明。其中是否有\0
字符或任何零长度空格?这些需要清理。正如@flyzx建议的,您应该使用urlencode()
但问题是您不能直接在字符串上使用它,因此您可能需要首先正确地清理它并对其进行编码,然后重新构建它。您需要urlencode
单个URL参数值,而不是整个URL本身。例如$URL=https://api.example.com/resource?x='.urlencode($x)“&y=”.urlencode($y);
请参见此处的帮助。