cUrl получает содержимое URL, содержащего & quot; ü & quot; U + 00FC% c3% до н.э.

Я пытаюсь получить информацию о продуктах, названии, изображении, цене и т. Д.

Все остальные 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 страницу 404 Sainsburys, утверждая, что страница не найдена.
копирование http://www.sainsburys.co.uk/shop/gb/groceries/desserts/ gü-lemon-pots-3x45g из строки URL приводит к копированию версии ü (% C3% BC) в кодировке URL, как и ожидалось. При вводе URL-адреса в браузере ü и% C3% BC могут использоваться для перехода на страницу фактического продукта, так почему же Sainsburys возвращает 404 при cUrl’d?

Я пробовал разные вещи, такие как urldecode(), используя точные заголовки, которые использует браузер, но безрезультатно.

0

Решение

Похоже, проблема с самим сайтом Sainsbury.

Сервер возвращает 404, когда вы не отправляете действительный файл cookie.

Вы пытались перезагрузить?

Я старался

stringtest.php?url=http://www.sainsburys.co.uk/shop/gb/groceries/desserts/gü-chocolate-ganache-pots-3x45g

и он работал с действительным cookie.

0

Другие решения

Если вы попытаетесь:

wget http://www.sainsburys.co.uk/shop/gb/groceries/desserts/g%C3%BC-lemon-pots-3x45g

Ответ:

http://www.sainsburys.co.uk/shop/gb/groceries/bakery
Resolving www.sainsburys.co.uk (www.sainsburys.co.uk)... 109.94.142.1
Connecting to www.sainsburys.co.uk (www.sainsburys.co.uk)|109.94.142.1|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://www.sainsburys.co.uk/webapp/wcs/stores/servlet/gb/groceries/bakery?langId=44&storeId=10151&krypto=xbYM3SJja%2F1mDOxJIVlKl9vZN6zjdlTL4MSiHOKiUMQoum9OkLwoTv6wj27CjUXwqM4%2BsteXag0O%0AQOWiHuS8onFdmoVLWlJyZ7hXaMhcMW9MIMMAsnPdWTPEzSEnOP5a&ddkey=http:AjaxAutoCompleteDisplayView [following]
--2014-10-07 11:56:11-- http://www.sainsburys.co.uk/webapp/wcs/stores/servlet/gb/groceries/bakery?langId=44&storeId=10151&krypto=xbYM3SJja%2F1mDOxJIVlKl9vZN6zjdlTL4MSiHOKiUMQoum9OkLwoTv6wj27CjUXwqM4%2BsteXag0O%0AQOWiHuS8onFdmoVLWlJyZ7hXaMhcMW9MIMMAsnPdWTPEzSEnOP5a&ddkey=http:AjaxAutoCompleteDisplayView
Reusing existing connection to www.sainsburys.co.uk:80.
HTTP request sent, awaiting response... 200 OK

Чтобы следовать перенаправлению в curl, используйте флаг -L:

curl -L http://www.sainsburys.co.uk/shop/gb/groceries/desserts/g%C3%BC-lemon-pots-3x45g
0

По вопросам рекламы [email protected]