Юзер-агент в курле

Тема в разделе "PHP", создана пользователем Levitt, 27 дек 2011.

Модераторы: latteo
  1. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    В общем, гляньте что не так с кодом вызова курла и передачей юзер-агента.

    Если юзерагент заполнен то в спашенном тексте с http://www.google.com/search?q=hello&hl=en присутствуют кракозябри, если юзераегнту передавать имеет пустое значение то текст парсится отлично. Как наладить скрипт с не пустым юзер-агентом? Может что-то ещё не передал?

    PHP:
    <?
    $ragent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
    // $ragent="";
       
    $ch curl_init();
                    
    curl_setopt$chCURLOPT_URL"http://www.google.com/search?q=hello&hl=en" );
                    
    curl_setopt$chCURLOPT_HEADER);
                    
    curl_setopt$chCURLOPT_RETURNTRANSFER);
                    
    curl_setopt$chCURLOPT_TIMEOUT20 );
                    
    curl_setopt$chCURLOPT_PORT80 );
                    
    curl_setopt$chCURLOPT_USERAGENT$ragent); //
                    
    $content curl_exec$ch );
                    
    $code curl_getinfo$chCURLINFO_HTTP_CODE );
                    if ( 
    $code >= 400 )
                            
    $content false;
                    
    curl_close$ch );
                  echo 
    $content;
    ?>
     
  2. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    975
    Симпатии:
    255
    Какие заголовки получает курл при отправке юзер агента и при пустом юзер агенте? Кусок полученных крякозябл в студию! Возможно поисковик отдает тект в сжатом виде, например, в gzip.
     
  3. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Хедеры никакие предварительно не задаю.
    Вот такое встречается:
    ‎‏ - ‎‏12 hours ago
     
  4. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    это у вас кодировочка отличается от передаваемой. гугль отдает UTF-8, а у вас скрипт заточен под другую.
    текст точно не сжат, видно что латиница проходит норм.
     
  5. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    Видно, но вот почему когда пустой юзер-агент то все норм?
     
  6. thoth777

    thoth777

    Регистр.:
    28 ноя 2008
    Сообщения:
    314
    Симпатии:
    98
    капитан очевидность сказал бы что кодировка отдаваемого текста зависит от юзерагента, возможно, в нем у вас прописан "ru", например

    попробуйте посмотреть какая кодировка отдается при пустом агенте и заполненном
    mb_detect_encoding - в помощь.
     
  7. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    356
    Симпатии:
    34
    в первом сообщении есть рабочий код, в котором прописан юзерагент без упоминаний языка. Язык вообще через юзер-агент не передается
     
  8. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    У меня твой код выдаёт одинаковый результат не зависимо от того, указан юзер-агент или нет.
    С русским запросом кракозябры вылазят, если файл в ANSI кодировке. Если сохранить его в UTF - всё нормально работает.
    Значит либо сохраняй файл в UTF, либо перекодируй запрос.
     
  9. nulldamned

    nulldamned Создатель

    Регистр.:
    11 ноя 2006
    Сообщения:
    28
    Симпатии:
    22
    гугль выдает ответ не только по юзерагенту, но и по геоип - если прямо не указано в каком виде отдавать, а hl=en насколько помню не влияет на кодировку выдачи. т.е. вполне возможно что не получив юзерагента гугль решает выдавать кодировку cp1251 (основываясь на вашем ип), а получив юзер агент - смотрит по базе - видит, что с данным юзерагентом броузеры нормально отрабатывают utf-8 - вот и отдает. Гугль делает ВСЕ для "удобства" пользователя ;)