grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 02/12/07 в 15:59 |
Поставил себе недавно Денвер с 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.
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 02/12/07 в 16:04 |
попробуй так:
Код: |
<?
if(extension_loaded('curl'))print "Ok";
else print "Off";
?>
|
|
|
|
|
grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 02/12/07 в 16:06 |
"Ok" :/
В phpinfo() curl есть, сервер запрашишваемый тоже отвечает. Т.е. оно есть, но, почему-то работает некорректно
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 02/12/07 в 16:13 |
у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды
|
|
|
|
grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 02/12/07 в 16:16 |
ibiz писал: | у меня была подобная проблема очень давно... не помню точно, как решил... попробуй заменить библиотеку php_curl.dll с оф сайта
или рнр поставить полную версию с оф сайт для винды
|
Спасибо, буду трахаться
Со старым денвером всё работало замечательно, а тут - на тебе
Пошёл пробовать...
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|
grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 02/12/07 в 18:43 |
Ура! Разобрался!
Проблема, как оказалось, была совсем не в 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 - понятия не имею; да оно и не нужно на данный момент
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 02/12/07 в 21:45 |
Есть вариант читать encoding заголовок и если сервер вернул gzip самому пропускать через zlib функции которых есть у php.
Но можно попробовать способ лучьше.
curl_setopt($session,CURLOPT_ENCODING,"");
Начиная с curl 7.10 должно работать.
PS в ручную почти никогда не стоит оформлять заголовок. для этого есть curl_setopt.
|
|
|
|
grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 03/12/07 в 03:49 |
Ооо, 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. Нету ли у тебя куска готового, как с ним работать ?
Если есть - спасибо. Если нет - тоже спасибо, подучил!
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 03/12/07 в 14:18 |
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 есть). Другого кода у меня нет не занимался этим.
|
|
|
|
grammar nazi
С нами с 23.01.03
Сообщения: 6974
Рейтинг: 2037
|
Добавлено: 03/12/07 в 16:36 |
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 есть). Другого кода у меня нет не занимался этим. |
Ок, поищу. Сэньку ещё раз. ;)
|
|
Меня как из ушата окатили. Так гадко стало. И обидно.
Пустышка.
|
0
|
|
|