在2nd Curl中使用来自1st Curl的响应标头的$url时出错,但手动写入url可以工作

  • 本文关键字:url Curl 出错 工作 2nd 响应 1st php curl
  • 更新时间 :
  • 英文 :


我从1st curl的响应中获得下一个url,并在echo中显示url,但当我在2nd curl中放入$url时,它不起作用,直到我在$ch=curl_init('ww.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保存在一个文本文件中,并从那里获得第二次卷曲,但没有使用

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";
}
}

}

如果我是对的,它应该打印类似于:byte #19 contains: carriage-return byte.

您可以做的另一件事是通过echo bin2hex($url);运行它,并将每个字节与https://asciitable.com以查找不可打印的字符。

最新更新