Php 在第二个Curl中使用第1个Curl的响应头中的$url时出错,但手动写入url可以正常工作

Php 在第二个Curl中使用第1个Curl的响应头中的$url时出错,但手动写入url可以正常工作,php,curl,Php,Curl,我从1st curl的响应中得到下一个url,并在其回显中显示url,但当我在2nd curl中放入$url时,直到我在$ch=curl_init('www.example1.com')中手动写入url时,它才起作用;这样地 我的php脚本是 1st Curl $ch = curl_init('www.example.com'); curl_setopt($ch, CURLOPT_GET, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

我从1st curl的响应中得到下一个url,并在其回显中显示url,但当我在2nd curl中放入$url时,直到我在$ch=curl_init('www.example1.com')中手动写入url时,它才起作用;这样地 我的php脚本是

1st Curl


$ch = curl_init('www.example.com');
curl_setopt($ch, CURLOPT_GET, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
$headers = [];
$output = rtrim($output);
$data = explode("\n",$output);
$headers = $data[8];
$url = substr($headers, 10);

echo $url;
/////echo正在工作并显示url,但在下面的curl中,当我放置$url或“.$url”时,它不工作 但是当我手动放置它时,它会工作。。。。。你能给我一些建议吗? 我还试图将url保存在一个文本文件中,并从中获取第二个url,但没有用

2nd Curl


$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);

最有可能是不可见/不可打印的字符

我的最佳猜测是:$url末尾有一个不可见的回车字节,它使您的url无效,因为您的头提取代码有缺陷。尝试通过此函数运行url以验证:

function f(string $url){
    $needles = array(
        "carriage-return"=>"\r",
        "newline"=>"\n",
        "null"=>"\x00"
    );
    for($i=0;$i<strlen($url);++$i){
        $found = array_search($url[$i],$needles,true);
        if($found!==false){
            echo "byte #{$i} contains: {$found} byte.\n";
        }
    }
    
}
函数f(字符串$url){ $TINERS=阵列( “回车符”=>“\r”, “换行符”=>“\n”, “空”=>“\x00” );
对于($i=0;$i此行是什么?
$url=json\u解码(json\u编码($url))
应该实现吗?@El_Vanja我不知道OP的目的是不是这样,但我可以告诉你它是做什么的:它会从json中删除格式,例如如果json打印得很漂亮,你想从中删除漂亮的内容,这就是解决问题的方法NOW@SoulfulRecites顺便说一句,头解析器的修复方法是替换
$data=explode(“\n”,$output);
带有
$data=explode(\r\n”,$output);
-对于http标头,回车字节是标头分隔符的一部分^^