Запрос страницы гугл скриптом

12
Книжник
На сайте с 05.05.2006
Offline
103
1645
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.ru");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: text/xml;charset=\"utf-8\""));
curl_setopt($ch, CURLOPT_HEADER, true);

curl_exec($ch);


curl_close($ch);
?>

Запрашиваю скриптом со своего компа главную страницу гугла. Страницу выдает, но на экране абракадабра. Посмотрел заголовок, что присылает гугл. В заголовке кодировка win-1251. у меня на странице скрипта utf-8. ГДе ошибка, почему гугл присылает в такой кодировке, в какой присылает?

О компьютерах, сканерах, принтерах и программах: выбор, покупка и подключение. (http://aundd.narod.ru)
[umka]
На сайте с 25.05.2008
Offline
456
#1

Вы ему не посылаете заголовок Accept-Charset … вот он и творит, что хочет.

Лог в помощь!
Книжник
На сайте с 05.05.2006
Offline
103
#2
'[umka:
;9826957']Вы ему не посылаете заголовок Accept-Charset … вот он и творит, что хочет.

То есть, браузер при запросе отсылает заголовок, а мой скрипт не отсылает получается? и гугл по-умолчанию шлет win-1251?

[umka]
На сайте с 25.05.2008
Offline
456
#3
Книжник:
То есть, браузер при запросе отсылает заголовок, а мой скрипт не отсылает получается? и гугл по-умолчанию шлет win-1251?

Лично у меня браузер не шлёт.

Браузер просто берёт и отображает контент в той кодировке, в которой его возвращает гугл.

По-скольку на вашем сайте не может использоваться кодировка, возвращаемая гуглом по-умолчанию, вам нужно либо указывать нужную кодировку в запросе, либо перекодировать получаемый контент.

Книжник
На сайте с 05.05.2006
Offline
103
#4
'[umka:
;9826992']Лично у меня браузер не шлёт.
Браузер просто берёт и отображает контент в той кодировке, в которой его возвращает гугл.
По-скольку на вашем сайте не может использоваться кодировка, возвращаемая гуглом по-умолчанию, вам нужно либо указывать нужную кодировку в запросе, либо перекодировать получаемый контент.

Скрипт у меня на локальном хосте (на локальном сайте). А почему не может использоваться кодировка, отображаемая гуглом? Скрипт делает запрос, а потом выводит страницу в браузер. Не понимаю, почему он также не выводит страницу гугла в браузер, как если бы я ее в самом браузере набрал.

[umka]
На сайте с 25.05.2008
Offline
456
#5
Книжник:
Скрипт у меня на локальном хосте (на локальном сайте). А почему не может использоваться кодировка, отображаемая гуглом? Скрипт делает запрос, а потом выводит страницу в браузер. Не понимаю, почему он также не выводит страницу гугла в браузер, как если бы я ее в самом браузере набрал.

Помимо контента (кода страницы) есть ещё и http-заголовки.

Curl-ом вы получаете только тело страницы.

Если у вас скрипт работает в кодировке utf-8, и при этом отдаёт код страницы в кодировке cp1251, то в браузере получается абракадабра.

R
На сайте с 17.11.2011
Offline
22
#6

сбросьте в файл запрос, и посмотрети нет ли там указания чарсета.

И еще проверьте заодно строку запроса, там тоже может быть указан чарсет.

Далее, в user_agent может быть отправляется *win32*, вот он и выдает тот чарсет, что подходит больше всего.

домашняя страница - google.com.ua
Книжник
На сайте с 05.05.2006
Offline
103
#7
'[umka:
;9827062']Помимо контента (кода страницы) есть ещё и http-заголовки.
Curl-ом вы получаете только тело страницы.
Если у вас скрипт работает в кодировке utf-8, и при этом отдаёт код страницы в кодировке cp1251, то в браузере получается абракадабра.

Скрипт у меня находится на страничке с кодировкой utf-8. А значит браузеру он отдает в кодировке cp1251. А как он решил, что отдавать надо в ней? а гугл ему в какой кодировке присылает, как узнать?

---------- Добавлено в 21:51 ---------- Предыдущее сообщение было в 21:49 ----------

rommer:
сбросьте в файл запрос, и посмотрети нет ли там указания чарсета.
И еще проверьте заодно строку запроса, там тоже может быть указан чарсет.
Далее, в user_agent может быть отправляется *win32*, вот он и выдает тот чарсет, что подходит больше всего.

Буду признателен, если вы намекнете - как сбросить запрос в файл. То есть, вы подозреваете, что при запросе указывается кодировка для ответа и гугл в ней и выдает.

[umka]
На сайте с 25.05.2008
Offline
456
#8
Книжник:
Скрипт у меня находится на страничке с кодировкой utf-8. Значит он браузеру отдает в кодировке cp1251. А как он решил, что отдавать надо в ней? а гугл ему в какой кодировке присылает, как узнать?

Если в конфиге виртуального хоста, на котором работает скрипт, кодировка по-умолчанию utf-8, то этот скрипт каждый раз сообщает вашему браузеру, что информация выдаётся в utf-8.

Из гугла скрипт получает инфу в cp1251, а браузеру он говорит, что инфа в utf-8.

Браузер показывает вам инфу в кодировке utf-8, хотя на самом деле она в cp1251.

Вам нужно либо:

1. Изменить кодировку виртуального хоста

2. Запрашивать у гугла инфу в нужной вам кодировке

3. Перекодировать инфу из кодировки, полученной в ответном заголовке гугла, в кодировку виртуального хоста.

Книжник
На сайте с 05.05.2006
Offline
103
#9
'[umka:
;9827085']Если в конфиге виртуального хоста, на котором работает скрипт, кодировка по-умолчанию utf-8, то этот скрипт каждый раз сообщает вашему браузеру, что информация выдаётся в utf-8.
Из гугла скрипт получает инфу в cp1251, а браузеру он говорит, что инфа в utf-8.
Браузер показывает вам инфу в кодировке utf-8, хотя на самом деле она в cp1251.

Вам нужно либо:
1. Изменить кодировку виртуального хоста
2. Запрашивать у гугла инфу в нужной вам кодировке
3. Перекодировать инфу из кодировки, полученной в ответном заголовке гугла, в кодировку виртуального хоста.

Первый и третий варианты мне не очень, а вот второй нравится.

А как это сделать?

Кстати в браузер гугл передает страницы в utf-8 (при ручном запросе из браузера), на хосте у меня uft-8, скрипт на страничке с uft-8. А когда смотрю заголовок, отправляемый гуглом при запросе скрипта, то в заголовке стоит cp1251. Нафига гугл так делает?

P.s: кстати Яша выдает заголовок в utf-8 и все нормально отображается.

R
На сайте с 17.11.2011
Offline
22
#10
Книжник:

Буду признателен, если вы намекнете - как сбросить запрос в файл. То есть, вы подозреваете, что при запросе указывается кодировка для ответа и гугл в ней и выдает.

Ну, как сбросить..... просто 😂

Заменить google на локалхост наверное.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий