-ѕодписка по e-mail

 

 -ѕоиск по дневнику

ѕоиск сообщений в NeoliteBSD

 -—татистика

—татистика LiveInternet.ru: показано количество хитов и посетителей
—оздан: 25.07.2007
«аписей: 39
 омментариев: 25
Ќаписано: 106

Opera Software Update System

¬торник, 09 »юн€ 2009 г. 14:16 + в цитатник
я давно думал о том, чтобы написать систему управлени€ своей коллекцией софта, но только недавно нашлось врем€. » первым шагом было автоматизировать проверку новых версий программ. Ѕольшинство программ не имеют встроенного механизма проверки наличи€ новых версий и тем более, автоматического обновлени€, поэтому приходилось информацию о них получать методом парсинга страниц офф. сайтов. ¬ тоже врем€ глупо было бы не воспользоватьс€ имеющимис€ системами, учитыва€ что они дают куда более точную информацию о новых верси€х. »так, начнем с самого крепкого орешка - ќперы. Ќа то, чтобы пон€ть как работает еЄ система обновлений у мен€ ушло 3 дн€, поэтому € просто не поделитьс€ полученной информацией =)

Ќа данный момент Opera использует два протокола проверки наличи€ новых версий:

1. »спользуетс€ дл€ обновлени€ текущих стабильных версий 9.xx.

Ўифрование не используетс€, все передаетс€ по протоколу HTTP. —ервер обновлений - xml.opera.com.
ѕроверить его работу можно очень просто: достаточно перейти по ссылке http://xml.opera.com/update/. ≈сли сделать это в опере - вам предстанет XML документ с перечислением последних версий дл€ различных локализаций.


GET /update/?timesincelastcheck=585 HTTP/1.1
User-Agent: Opera/9.64 (Windows NT 5.2; U; MRA 5.4 (build 02647); ru) Presto/2.1.1
Host: xml.opera.com
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers


HTTP/1.1 200 OK
Date: Tue, 09 Jun 2009 08:10:59 GMT
Server: Apache/2.2.3 (Debian) mod_apreq2-20051231/2.6.0 mod_perl/2.0.2 Perl/v5.8.8
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml

99f
<?xml version="1.0" encoding="utf-8"?>
<versioncheck spoof="1241625280" bspit="1242739781">
<idn>:jp:de:se:kr:tw:cn:at:dk:ch:li:museum:hu:xn--kgbechtv:xn--hgbk6aj7f53bba:xn--0zwm56d:xn--g6w251d:xn--80akhbyknj4f:xn--11b5bs3a9aj6g:xn--jxalpdlp:xn--9t4b11yi5a:xn--deba0ad:xn--zckzah:xn--hlcj6aya9esc7a:</idn>
<latestversion lang="af">9.27</latestversion>
<latestversion lang="be">9.64</latestversion>
<latestversion lang="bg">9.64</latestversion>
<latestversion lang="ca">9.27</latestversion>
<latestversion lang="cs">9.64</latestversion>
<latestversion lang="da">9.64</latestversion>
<latestversion lang="de">9.64</latestversion>
<latestversion lang="el">9.64</latestversion>
<latestversion lang="en">9.64</latestversion>
<latestversion lang="en-gb">9.64</latestversion>
<latestversion lang="en-us">9.27</latestversion>
<latestversion lang="es-es">9.64</latestversion>
<latestversion lang="es-la">9.64</latestversion>
<latestversion lang="et">9.64</latestversion>
<latestversion lang="fi">9.64</latestversion>
<latestversion lang="fr">9.64</latestversion>
<latestversion lang="fr-ca">9.64</latestversion>
<latestversion lang="fy">9.64</latestversion>
<latestversion lang="hi">9.64</latestversion>
<latestversion lang="hr">9.64</latestversion>
<latestversion lang="hu">9.64</latestversion>
<latestversion lang="id">9.64</latestversion>
<latestversion lang="it">9.64</latestversion>
<latestversion lang="ja">9.64</latestversion>
<latestversion lang="ka">9.64</latestversion>
<latestversion lang="ko">9.64</latestversion>
<latestversion lang="lt">9.64</latestversion>
<latestversion lang="mk">9.64</latestversion>
<latestversion lang="nb">9.64</latestversion>
<latestversion lang="nl">9.64</latestversion>
<latestversion lang="nn">9.64</latestversion>
<latestversion lang="pa">9.27</latestversion>
<latestversion lang="pl">9.64</latestversion>
<latestversion lang="pt">9.64</latestversion>
<latestversion lang="pt-br">9.64</latestversion>
<latestversion lang="ru">9.64</latestversion>
<latestversion lang="sv">9.64</latestversion>
<latestversion lang="ta">9.64</latestversion>
<latestversion lang="te">9.64</latestversion>
<latestversion lang="th">9.27</latestversion>
<latestversion lang="tr">9.64</latestversion>
<latestversion lang="uk">9.64</latestversion>
<latestversion lang="zh-cn">9.64</latestversion>
<latestversion lang="zh-tw">9.64</latestversion>
</versioncheck>

0




—уд€ по всему, алгоритм работы проверки в данном случае таков: получаем XML документ, парсим, выбираем ноду с нужной нам локализацией и сравниваем версии. ≈сли верси€ из документа больше текущей версии программы, говорим о доступности обновлени€.
ѕлюсы такого подхода - можно провер€ть обновлени€ сразу дл€ различных локализаций.

2. »спользуетс€ начина€ с версии 10.00 (9.80):
ѕо умолчанию, все данные передаютс€ по протоколу HTTPS. —уд€ по дампу пакетов, соединение происходит все же с сервером xml.opera.org, хот€ в поле Host, равно как и в opera:config фигурирует autoupdate.opera.com.
 стати именно через него можно на данный момент помен€ть сервер обновлений или просто сменить протокол проверки обновлений с https на http: opera:config#AutoUpdate.
” мен€ есть два предположени€ относительно различи€ протоколов: либо этот протокол используетс€ только дл€ Alpha/Beta версий (что вр€д ли), либо это новый протокол который будет использоватьс€ дл€ проверки новых версий начина€ с версии 10.xx (9.80).

POST / HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.00
Host: autoupdate.opera.com
Content-Type: application/x-www-form-urlencoded

<?xml version="1.0" encoding="utf-8"?><oau:versioncheck schema-version="1.0" update-level="3" xmlns:oau="urn:OperaAutoupdate"><opera><version>10.00</version><build-number>1535</build-number><language>en</language><edition/><time-since-last-check>322</time-since-last-check><should-serve-all>1</should-serve-all><modules><browserjs-timestamp>1242739880</browserjs-timestamp><spoof-timestamp>1241625280</spoof-timestamp><dictionary-timestamp>1242743614</dictionary-timestamp><dictionary><language version="1.0">ru</language><language version="1.0">en</language></dictionary></modules></opera><operating-system><platform>Windows</platform><version>XP</version><architecture>i386</architecture></operating-system><package><package-type>msi</package-type><gcc/><qt/></package></oau:versioncheck>


HTTP/1.1 200 OK
Date: Tue, 09 Jun 2009 09:30:24 GMT
Server: Apache/2.2.3 (Debian) mod_apreq2-20051231/2.6.0 mod_perl/2.0.2 Perl/v5.8.8
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Pragma: no-cache
Expires: Thu, 1 Jan 1970 00:00:01 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=utf-8

398
<?xml version="1.0" encoding="UTF-8"?>
<oau:versioncheck xmlns:oau="urn:OperaAutoupdate" version="1.0"><resources><downloadurl>http://www.opera.com/download</downloadurl></resources><file><name>Opera_1000_1551_en.msi</name><url>http://www.opera.com/download/get.pl?id=32080&location=148&nothanks=yes&sub=marine</url><urlalt>http://www.opera.com/download/get.pl?id=32080&location=148&nothanks=yes&sub=marine</urlalt><version>10.00</version><bnum>1551</bnum><size>7130316</size><lang delimiter=",">en</lang><type>Full</type><checksum>31d5eefc5c13580ee5f4e01faa31c33cb227eca229213dd58c4cba14d492cfb7</checksum><infourl>http://help.opera.com/updateinfo/?bnum=1551&opsys=Windows&version=10.00&edition=</infourl></file><setting><file>Opera6.ini</file><section>Network</section><key>IDNA White List</key><data>:jp:de:se:kr:tw:cn:at:dk:ch:li:museum:hu:</data></setting></oau:versioncheck>

0




“еперь разберем запрос и ответ. «апрос всегда строитс€ по одному принципу:

<?xml version="1.0" encoding="utf-8"?>
<oau:versioncheck schema-version="1.0" update-level="3" xmlns:oau="urn:OperaAutoupdate">
 <opera>
  <version>10.00</version>
  <build-number>1535</build-number>
  <language>en</language>
  <edition/>
  <time-since-last-check>322</time-since-last-check>
  <should-serve-all>1</should-serve-all>
  <modules>
   <browserjs-timestamp>1242739880</browserjs-timestamp>
   <spoof-timestamp>1241625280</spoof-timestamp>
   <dictionary-timestamp>1242743614</dictionary-timestamp>
   <dictionary>
    <language version="1.0">ru</language>
    <language version="1.0">en</language>
   </dictionary>
  </modules>
 </opera>
 <operating-system>
  <platform>Windows</platform>
  <version>XP</version>
  <architecture>i386</architecture>
 </operating-system>
 <package>
  <package-type>msi</package-type>
  <gcc/>
  <qt/>
 </package>
</oau:versioncheck>


ќтвет же может отличатьс€ в зависимости от того, доступна ли нова€ верси€ или нет:

<?xml version="1.0" encoding="UTF-8"?>
<oau:versioncheck xmlns:oau="urn:OperaAutoupdate" version="1.0">
 <resources>
  <downloadurl>http://www.opera.com/download</downloadurl>
 </resources>
 <file>
  <name>Opera_1000_1551_en.msi</name>
  <url>http://www.opera.com/download/get.pl?id=32080&location=148&nothanks=yes&sub=marine</url>
  <urlalt>http://www.opera.com/download/get.pl?id=32080&location=148&nothanks=yes&sub=marine</urlalt>
  <version>10.00</version>
  <bnum>1551</bnum>
  <size>7130316</size>
  <lang delimiter=",">en</lang>
  <type>Full</type>
  <checksum>31d5eefc5c13580ee5f4e01faa31c33cb227eca229213dd58c4cba14d492cfb7</checksum>
  <infourl>http://help.opera.com/updateinfo/?bnum=1551&opsys=Windows&version=10.00&edition=</infourl>
 </file>
 <setting>
  <file>Opera6.ini</file>
  <section>Network</section>
  <key>IDNA White List</key>
  <data>:jp:de:se:kr:tw:cn:at:dk:ch:li:museum:hu:</data>
 </setting>
</oau:versioncheck>

или

<?xml version="1.0" encoding="UTF-8"?>
<oau:versioncheck xmlns:oau="urn:OperaAutoupdate" version="1.0">
 <resources>
  <downloadurl>http://www.opera.com/download</downloadurl>
 </resources>
 <setting>
  <file>Opera6.ini</file>
  <section>Network</section>
  <key>IDNA White List</key>
  <data>:jp:de:se:kr:tw:cn:at:dk:ch:li:museum:hu:</data>
 </setting>
</oau:versioncheck>


“ут, суд€ по всему, проверка происходит уже на стороне сервера: ему передаютс€ данные о текущей версии браузера, операционной системе, локализации и пр. и их на основе сервер определ€ет имеетс€ ли в наличии подход€щее обновление. ≈сли да, то в ответе будет фигурировать нода <file> Ёта система все больше напоминает AUS (Application Update Service) используемую в продуктах Mozilla о которой € расскажу несколько позднее.
–убрики:  —татьи
»сследовани€
ћетки:  



 

ƒобавить комментарий:
“екст комментари€: смайлики

ѕроверка орфографии: (найти ошибки)

ѕрикрепить картинку:

 ѕереводить URL в ссылку
 ѕодписатьс€ на комментарии
 ѕодписать картинку