php - 使用 $url 时出错,来自 1st Curl 的响应标头,在 2nd Curl 中,但手动编写 url 有效
问题描述
我从第一个 curl 的响应中获取下一个 url,并在 echo 中显示该 url,但是当 1 将 $url 放入第二个 curl 时,它不起作用,直到我在 $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 保存在文本文件中并从那里获取第二个 Curl 但没有用
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.
您可以做的另一件事是运行它并使用https://asciitable.comecho bin2hex($url);
交叉引用每个字节以查找不可打印的字符。
推荐阅读
- mysql - NodeJS AWS RDS 连接数据库未找到错误
- python - 如何在 Apple Silicon (ARM / M1) 上安装 SciPy
- firebase - 错误:错误:无法从“Screens\HomeScreen.js”解析模块“ahoefa11.png”:在项目中找不到ahoefa11.png
- javascript - 在谷歌表格中自动化命名范围函数
- r - 如何找到每个ID的统计模式
- python - 'Asyncio' 事件循环不起作用 [Discord PY]
- html - Colorbox 插件在加载和运行后不允许点击父网页
- mysql - 如何根据 IN() 列表顺序对 SELECT 结果进行排序?
- python - 从 python 文件调用模块 yaml 时,PyYAML-3.10 包中包含的文件中的编译错误
- sql - 如何在 SQL 查询中添加 AND 条件