php中使用curl的函数在将url作为变量传递时给出404,但在传递字符串时给出200(ok)结果

php中使用curl的函数在将url作为变量传递时给出404,但在传递字符串时给出200(ok)结果,php,curl,Php,Curl,我试图从网页中获取图像并将其保存到我的电脑中,但当我通过从网页中获取图像并将其保存在变量中来传递其url时。并将该变量传递给curl image fetch函数,它返回404。 但当我打印抓取的url变量并通过复制粘贴将该变量的打印值传递给函数时,它返回200(确定)并保存图像 这是我的密码: preg_match('/id=\"searchForm:j_idt40\" src=\"(.*?)\"/', open('http://pas.fdle.state.fl.us/pas/restrict

我试图从网页中获取图像并将其保存到我的电脑中,但当我通过从网页中获取图像并将其保存在变量中来传递其url时。并将该变量传递给curl image fetch函数,它返回404。 但当我打印抓取的url变量并通过复制粘贴将该变量的打印值传递给函数时,它返回200(确定)并保存图像

这是我的密码:

preg_match('/id=\"searchForm:j_idt40\" src=\"(.*?)\"/', open('http://pas.fdle.state.fl.us/pas/restricted/PAS/StolenBoats.jsf'), $matches);
$url2= "http://pas.fdle.state.fl.us".$matches[1];
echo $url2;
grab_image($url2,"image2.jpg");
function open($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);  
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIE, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, "1");   //writes cookie
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_REFERER, 'http://pas.fdle.state.fl.us/pas/restricted/PAS/StolenBoats.jsf');    
    $result = curl_exec($ch);  
    curl_close($ch);
    return $result;
}
function get_web_page( $url )
    {
        $user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';

        $options = array(

            CURLOPT_CUSTOMREQUEST  =>"GET",        //set request type post or get
            CURLOPT_POST           =>false,        //set to GET
            CURLOPT_USERAGENT      => $user_agent, //set user agent
            CURLOPT_COOKIEFILE     =>"cookie.txt", //set cookie file
            CURLOPT_COOKIEJAR      =>"cookie.txt", //set cookie jar
            CURLOPT_RETURNTRANSFER => true,     // return web page
            CURLOPT_HEADER         => false,    // don't return headers
            CURLOPT_FOLLOWLOCATION => true,     // follow redirects
            CURLOPT_ENCODING       => "",       // handle all encodings
            CURLOPT_AUTOREFERER    => true,     // set referer on redirect
            CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
            CURLOPT_TIMEOUT        => 120,      // timeout on response
            CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        );

        $ch      = curl_init( $url );
        curl_setopt_array( $ch, $options );
        $content = curl_exec( $ch );
        $err     = curl_errno( $ch );
        $errmsg  = curl_error( $ch );
        $header  = curl_getinfo( $ch );
        $code=curl_getinfo($ch,CURLINFO_HTTP_CODE); 
        echo"<br>resp code:".$code;
        curl_close( $ch );
        $header['errno']   = $err;
        $header['errmsg']  = $errmsg;
        $header['content'] = $content;
        return $header;
    }
function grab_image($url1,$save) {

echo"<br>#########################################################<br>";
echo"URL=".$url1;
    $result = get_web_page($url1);
    echo"<br>Errorno:".$result['errno'];
    echo"<br>Error msg:".$result['errmsg'];
    echo"<br>Content:".$result['content'];
    if(file_exists($save)){
        unlink($save);
    }
    $fp = fopen($save,'x');
    fwrite($fp, $result['content']);
    fclose($fp);
}
var_dump($url)结果如下:

dump before calling function:
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb" 

dump before curl execution inside function
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb" 
resp code:404

dump after curl:
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb"

您是否已将变量与预期值进行了比较?var_dump($var==='您期望的字符串')?事实上,我试过了,但那没有帮助,因为url是动态的,每次我比较复制的字符串和变量时,变量都发生了变化。这不是什么?但如果我将复制的字符串传递给函数,它会保存我的图像。我试图提出的一点是,很明显,在执行路径的某个地方,url被破坏或更改。如果您在任何地方添加var_dump($url),您可能会看到它在哪里被更改。
dump before calling function:
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb" 

dump before curl execution inside function
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb" 
resp code:404

dump after curl:
string(297) "http://pas.fdle.state.fl.us/pas/javax.faces.resource/dynamiccontent.properties.jsf;jsessionid=QoecD0pG5uUUzXKOtMalTPJQhVu8ZkZFN7Y2VWYo.MEGADETHPRIMARY?ln=primefaces&v=6.1.2&pfdrid=558b6b95c559b790d2a10e03dbb80110&pfdrt=sc&pfdrid_c=false&uid=f15b2a89-ae8e-49d5-ac70-933c026b1ecb"