Php 将变量传递给CURLOPT_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; }

关于curl请求,我有一个线索,当我向CURLOPT_URL参数传递一个变量时,我从响应中得到了坏值,当我硬编码URL curl时,返回了好值:

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);
请参见此处的帮助。