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&#956
7;


Бредятины такой много и при каждом запуске она разная.

Не могу понять, в чём дело. icon_sad.gif Погуглить тоже не получается, т.к. отсутствует хоть какой-то текст или признак ошибки.

Может кто-то стакливался с таким ? Подскажите, куда копать.

Спасибо заранее.

з.ы. Проверил хедеры - всё работает нормально. Сервер отвечает 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 есть, сервер запрашишваемый тоже отвечает. Т.е. оно есть, но, почему-то работает некорректно icon_sad.gif
цитата
02/12/07 в 16:13
 ibiz
у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды
цитата
02/12/07 в 16:16
 Adulter
ibiz писал:
у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды


Спасибо, буду трахаться icon_smile.gif

Со старым денвером всё работало замечательно, а тут - на тебе icon_sad.gif

Пошёл пробовать...
цитата
02/12/07 в 18:43
 Adulter
Ура! Разобрался!

Проблема, как оказалось, была совсем не в cURLе icon_smile.gif

В погоне за "эмулированием настоящего сёрфера" хедер имел вот такой вид:

Код:
# 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 - понятия не имею; да оно и не нужно на данный момент icon_smile.gif
цитата
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, спасибо огромное! icon_smile.gif

Вот моя версия 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. Нету ли у тебя куска готового, как с ним работать ?

Если есть - спасибо. Если нет - тоже спасибо, подучил! icon_smile.gif
цитата
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. Нету ли у тебя куска готового, как с ним работать ?

Если есть - спасибо. Если нет - тоже спасибо, подучил! icon_smile.gif

Так в документации по 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, а там, думаю, сервера настроены правильно. icon_smile.gif

Просто не нужно было отсылать этот accept-encoding: gzip, что я собственно и сделал.


Sha писал:
Так в документации по PHP пример есть. Смотри функции zlib (там же и deflate есть). Другого кода у меня нет не занимался этим.


Ок, поищу. Сэньку ещё раз. ;)


Эта страница в полной версии