Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
PHP, cURL, Denwer - проблема
Новая тема
Ответить
цитата
02/12/07 в 15:59
Adulter
Поставил себе недавно Денвер с PHP5.
Обновил версию PHP до 5.2.5. Раскомментировал cURL в php.ini
Возникла проблема. В файл результат работы (т.е. загруженную страницу) писать не хочет. Пробую вывести в окно браузера -
выдаёт бредятину, типа вот такой:
Оффтопик:
mаz,╨Рl, ╖П©}jН╢В╥gиет@ш)пIЩ$DУ╚]Hб жП╦├Шc├p╝ЖSХ╔
яZmв0{ЁLN9и╢ZЕ┤с▓┬%Щ�&
#9524;╧uЗФ]▀╡┴z┘bьZ═wч⌡
й:SГН"S(╦Ё[сЧ@zxYЫ╞jng═К▐,4ъ@хXμ
7;
Бредятины такой много и при каждом запуске она разная.
Не могу понять, в чём дело.
Погуглить тоже не получается, т.к. отсутствует хоть какой-то текст или признак ошибки.
Может кто-то стакливался с таким ? Подскажите, куда копать.
Спасибо заранее.
з.ы. Проверил хедеры - всё работает нормально. Сервер отвечает 200.
цитата
02/12/07 в 16:04
ibiz
попробуй так:
Код:
<?
if(extension_loaded('curl'))print "Ok";
else print "Off";
?>
цитата
02/12/07 в 16:06
Adulter
"Ok" :/
В phpinfo() curl есть, сервер запрашишваемый тоже отвечает. Т.е. оно есть, но, почему-то работает некорректно
цитата
02/12/07 в 16:13
ibiz
у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды
цитата
02/12/07 в 16:16
Adulter
ibiz писал:
у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды
Спасибо, буду трахаться
Со старым денвером всё работало замечательно, а тут - на тебе
Пошёл пробовать...
цитата
02/12/07 в 18:43
Adulter
Ура! Разобрался!
Проблема, как оказалось, была совсем не в cURLе
В погоне за "эмулированием настоящего сёрфера" хедер имел вот такой вид:
Код:
# standard browser header
$this->header = array(
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
"Accept-Language: en-us,en;q=0.5",
"Accept-Encoding: gzip,deflate",
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Connection: keep-alive",
"Keep-Alive: 300",
"User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/2.0.0.6"
);
Вся проблема заключалась в строке: "Accept-Encoding: gzip,deflate".
Совершенно случайно попал на сайт, который этот gzip не поддерживал и получил нормальный результат. Сейчас, если убрать эту строку - работает со всеми сайтами практически.
Как научить curl обрабатывать этот gzip - понятия не имею; да оно и не нужно на данный момент
цитата
02/12/07 в 21:45
Sha
Есть вариант читать encoding заголовок и если сервер вернул gzip самому пропускать через zlib функции которых есть у php.
Но можно попробовать способ лучьше.
curl_setopt($session,CURLOPT_ENCODING,"");
Начиная с curl 7.10 должно работать.
PS в ручную почти никогда не стоит оформлять заголовок. для этого есть curl_setopt.
цитата
03/12/07 в 03:49
Adulter
Ооо, Sha, спасибо огромное!
Вот моя версия curl, но я не уверен, какая будет на устанавливаемом сервере (в принципе, мне нужна универсальность, т.к. оное приложение будет на всяких серверах ставиться, думаю):
libcurl/7.16.0 OpenSSL/0.9.8d zlib/1.2.3
Я немного обнаглею и спрошу у тебя два вопроса, а точнее примера:
1.
Есть ли у тебя код, как через setopt ставить хедер ? У меня сначала делается массив, а потом
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header);
Честно говоря, я думал, что это - единственный возможный вариант, а о твоём даже не слышал, т.к. учусь только. Если есть пример - приведи пожалуйста.
2.
То же самое, только касается этого самого zlib'a. Нету ли у тебя куска готового, как с ним работать ?
Если есть - спасибо. Если нет - тоже спасибо, подучил!
цитата
03/12/07 в 14:18
Sha
Adulter писал:
Я немного обнаглею и спрошу у тебя два вопроса, а точнее примера:
1.
Есть ли у тебя код, как через setopt ставить хедер ? У меня сначала делается массив, а потом
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->header);
Честно говоря, я думал, что это - единственный возможный вариант, а о твоём даже не слышал, т.к. учусь только. Если есть пример - приведи пожалуйста.
Смотря какой хедер ? Вообще ставить хедеры как ты плохо поскольку библиотека CURL может дописывать свои и не отслеживает твои. С Accept-Encoding самый переносимый вариант имхо вообще не указывать его в своих хедерах. В крайнем случае будешь получать непакованные тела. Но если curl сам отправляет "Accept-Encoding: gzip", то покрайней мере он сам же будет "готов" его раскодировать.
PS как щас помню CURL посылает Accept-Encoding: zlib сам если откомпилирован с опцией zlib.
PPS кстати в ответе сервера присутствовал заголовок Content-Encoding ? мож поэтому curl не был в курсах ?
Цитата:
2.
То же самое, только касается этого самого zlib'a. Нету ли у тебя куска готового, как с ним работать ?
Если есть - спасибо. Если нет - тоже спасибо, подучил!
Так в документации по PHP пример есть. Смотри функции zlib (там же и deflate есть). Другого кода у меня нет не занимался этим.
цитата
03/12/07 в 16:36
Adulter
Sha писал:
Смотря какой хедер ? Вообще ставить хедеры как ты плохо поскольку библиотека CURL может дописывать свои и не отслеживает твои. С Accept-Encoding самый переносимый вариант имхо вообще не указывать его в своих хедерах. В крайнем случае будешь получать непакованные тела. Но если curl сам отправляет "Accept-Encoding: gzip", то покрайней мере он сам же будет "готов" его раскодировать.
PS как щас помню CURL посылает Accept-Encoding: zlib сам если откомпилирован с опцией zlib.
PPS кстати в ответе сервера присутствовал заголовок Content-Encoding ? мож поэтому curl не был в курсах ?
Я не помню, присутствовал ли, но я пробовал на yahoo и google, а там, думаю, сервера настроены правильно.
Просто не нужно было отсылать этот accept-encoding: gzip, что я собственно и сделал.
Sha писал:
Так в документации по PHP пример есть. Смотри функции zlib (там же и deflate есть). Другого кода у меня нет не занимался этим.
Ок, поищу. Сэньку ещё раз. ;)
Новая тема
Ответить
Эта страница в полной версии