как я могу получить версию файла в Интернете, но не скачать ее? - PullRequest
3 голосов
/ 10 августа 2009

Я получаю URL файла, например, http://cidian.youdao.com/download/YoudaoDict.exe

как я могу получить его версию, но не скачать ее?

nots 1: если вы сначала загрузили файл на свой компьютер, есть много способов получить его

версия, например, вы можете использовать инструменты окна "filever.exe", чтобы получить версию.

но я хочу не загружать его, по крайней мере, не загружать все это. Как я могу сделать? В ожидании вашего

помощь! Благодарю.

nots 2: я пробовал получить часть файла для получения версии:

Сначала я использовал инструмент загрузки "wget.exe", чтобы загрузить часть файла (wget.exe -

однопоточный инструмент загрузки, он может быть уверен, что загрузка из головы)

во-вторых, я использовал файл filever.exe для получения версии файла.

Таким образом, некоторые программы, которые я могу получить, имеют версию, но некоторые не могут (все они должны быть

скачано). Не знаю почему.

Ответы [ 5 ]

4 голосов
/ 10 августа 2009

Я заметил, что эта конкретная ссылка exe поддерживает запросы диапазона байтов.

$ curl -I http://cidian.youdao.com/download/YoudaoDict.exe
HTTP/1.1 200 OK
...
Accept-Ranges: bytes
Content-Length: 4820792
...
Content-Type: application/octet-stream

Вы можете сделать один или несколько запросов диапазона байтов HTTP, чтобы получить части файла, необходимые для определения версии. Вы бы просто делали несколько запросов, чтобы получить части файла, на который вы бы смотрели, если бы он был на вашем жестком диске.

Например, основываясь на спецификации HTTP / 1.1 , вы можете запросить первые 500 байтов с этим заголовком запроса:

curl -H"Range: bytes=0-499" http://... -o bytes-0-499.dat
3 голосов
/ 10 августа 2009

Вы можете выполнить запрос HTTP HEAD, и сервер может сообщить размер элемента в Content-Length . Он также может сообщать о версии под заголовком Last-Modified . Кроме того, ETag может присутствовать для той же цели.

Вы можете проверить это с помощью netcat:

> nc cidian.youdao.com 80
HEAD /download/YoudaoDict.exe HTTP/1.1
Host: cidian.youdao.com

HTTP/1.1 200 OK
Date: Mon, 10 Aug 2009 06:11:59 GMT
Server: Apache
ETag: "Dcm1w6Vxg51"
Last-Modified: Sat, 08 Aug 2009 02:18:40 GMT
Accept-Ranges: bytes
Content-Length: 4820792
X-Request-Received: t=1249884719506801
X-Request-Processing-Time: D=906244
Content-Type: application/octet-stream

Как вы можете видеть, в вашем примере даны все три заголовка, так что вы можете угадать изменения версии на основе этой информации. Я бы всегда проверял, чтобы Date и Last-Modified не совпадали, так как иногда последний устанавливается на первый для страниц, генерируемых скриптами.

3 голосов
/ 10 августа 2009

Номера версий, если таковые имеются, встроены в сам файл .exe. Вам потребуется загрузить хотя бы часть файла, чтобы получить эти биты метаданных.

Ознакомьтесь со спецификацией формата файла .exe .

1 голос
/ 10 августа 2009

Если ваша цель - определить, когда новая версия станет доступной, вы можете посмотреть ответ HTTP-запроса HEAD, как предлагали другие.

В противном случае вы можете очистить экран ( страница загрузки ) и извлечь информацию о последней версии. Существует удобный тег <dl id="downloadSth">, в котором указана информация о версии, которую можно собирать. Я понятия не имею, будет ли это надежным; Авторы сайта могут изменить это без предварительного уведомления.

Я бы посмотрел на использование BeautifulSoup для этого.

1 голос
/ 10 августа 2009

Теоретически, это именно та задача, для которой предназначен запрос HTTP HEAD , но iirc - единственная релевантная информация, которую вы получите по умолчанию (если запрос был обработан, конечно) быть Content-Length и Last-Modified. Редактировать: и ETag !

Это, вероятно, дает вам многое из того, что вам нужно знать, но если вы действительно хотите иметь номер версии, вам нужно будет контролировать веб-сервис и иметь возможность получать и добавлять эту информацию в заголовки ответа. Не так сложно сделать, но только если у вас есть контроль над сервисом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...