我正在尝试获取有关杂货,标题,图像,价格等的信息。
所有其他URL都可以正常工作,并且cUrl响应完全符合预期。
我遇到的问题是,当URL包含带重音的拉丁语/非标准url /非英语字符(如ü或è)时。
我已经尝试了所有可以想到的方法,但是可能缺少一个简单的解决方案:
stringtest.php?url=http://www.sainsburys.co.uk/shop/gb/groceries/desserts/g%C3%BC-lemon-pots-3x45g
stringtest.php?url=http://www.sainsburys.co.uk/shop/gb/groceries/desserts/gü-lemon-pots-3x45g
stringtest.php?url=http%3A%2F%2Fwww.sainsburys.co.uk%2Fshop%2Fgb%2Fgroceries%2Fdesserts%2Fg%C3%BC-lemon-pots-3x45g
这是我测试cUrl的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$url = $_GET['url'];
echo curlUrl($url);
function curlUrl($url){
$ch = curl_init();
$timeout = 5;
$cookie_file = "/tmp/cookie/cookie1.txt";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
?>
<form action="stringtest.php" method="get" id="process">
<input type="text" name="url" placeholder="Url" autofocus>
<input type="submit">
</form>
</body>
</html>
我从cUrl获得的结果是Sainsburys的404页面,声称找不到该页面。从网址列复制http://www.sainsburys.co.uk/shop/gb/groceries/desserts /gü-lemon-pots-3x45g会导致复制ü(%C3%BC)的URL编码版本,如预期的。在浏览器中输入URL时,ü和%C3%BC都可以用来访问实际的产品页面,那么为什么Sainsburys在提示时会返回404?
我已经尝试了各种方法,例如urldecode()
使用浏览器使用的确切标头进行,但无济于事。
似乎是塞恩斯伯里(Sainsbury)网站本身的问题。
当您不发送有效的cookie时,服务器将返回404。
您是否尝试过重新加载?
我试过了
stringtest.php?url=http://www.sainsburys.co.uk/shop/gb/groceries/desserts/gü-chocolate-ganache-pots-3x45g
它与有效的cookie一起使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句