wget pegar arquivos vazios que realmente existem

2

Eu tenho um script que serve para baixar um determinado número de arquivos de um servidor remoto. Só precisa fazer isso a cada 24 horas, pois são fontes JSON para um banco de dados no meu servidor. Os arquivos são atualizados no servidor remoto por volta da meia-noite GMT e meu script é executado uma hora depois para garantir que eles já estejam atualizados corretamente.

O problema é que eu sempre noto que ele não faz o download de pelo menos vinte ou mais dos 132 arquivos, exceto que ele não acha que falhou (vejo 200 OK). Eles são JSONs, então eles têm no máximo 8 KB. No arquivo de log do wget, vejo isto:

--2013-09-21 12:01:10--  http://services.runescape.com/m=itemdb_rs/api/graph/19227.json
Reusing existing connection to services.runescape.com:80.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/html]
Saving to: './jsons/19227.json'

 0K                                                        0.00 =0s

2013-09-21 12:01:10 (0.00 B/s) - './jsons/19227.json' saved [0/0]

Isso não faz sentido. Não há rima ou razão para os fracassos. Eu tentei várias vezes e sempre escrevia arquivos de 0 byte aleatoriamente, sem falhar nos mesmos arquivos a cada vez. A parte frustrante é que não há erros em nenhum lugar, então nada é detectado no log de erros ...

O

no-clobber não importa neste caso. Os arquivos devem ser sobrescritos, pois ficam desatualizados a cada 24 horas, e até mesmo "dados bons" do dia anterior são "dados ruins" hoje.

Existe algum lugar onde eu possa melhorar meu script para verificar o tamanho do arquivo ou o que quer que seja antes de baixar? Eu tentei no meu Mac em casa e obtive o mesmo resultado exato, mesmo usando o "modo spider" para verificar se existe primeiro. A parte mais frustrante é se eu colasse o URL em um navegador, ele carrega todo o JSON exatamente como deveria ... Eu entendo que "novas tentativas" não ajudarão, já que o wget não está executando nenhum erro HTTP de qualquer maneira. / p>     

por Jaska Börner 21.09.2013 / 18:26

2 respostas

1

Is there anywhere I could improve my script to check filesize or whatever before downloading?

Antes de o download não faria qualquer sentido, porque obviamente o servidor não responde corretamente às suas solicitações de download. Ele deve retornar o arquivo adequado ou deve retornar um código de erro HTTP, mas aparentemente não faz nenhum dos dois. Você pode tentar determinar o tamanho do arquivo remoto com uma solicitação HTTP HEAD , mas isso não será bom quando o arquivo remoto estiver bom, mas a entrega GET ainda falhará.

Em vez disso, use um loop no seu script para percorrer todos os arquivos que você deseja baixar. Faça o download de cada arquivo com uma única solicitação wget e, em seguida, verifique o tamanho do arquivo que você baixou. Se for um arquivo de 0 bytes e você tiver certeza de que não deveria ser, repita a solicitação. É claro que você deve adicionar um limite à prova de falhas para que seu script não repita a solicitação indefinidamente se sempre falhar, e talvez também um atraso (caso o servidor esteja limitando suas solicitações e falhando intencionalmente).

    
por 21.09.2013 / 19:06
1

Você pode tentar ativar a opção de depuração wget do -d para ver o que está acontecendo.

Exemplo

$ wget -d http://services.runescape.com/m=itemdb_rs/api/graph/19227.json
DEBUG output created by Wget 1.12 on linux-gnu.

--2013-09-21 13:22:46--  http://services.runescape.com/m=itemdb_rs/api/graph/19227.json
Resolving services.runescape.com... 216.115.77.143, 8.26.16.145, 62.67.0.145, ...
Caching services.runescape.com => 216.115.77.143 8.26.16.145 62.67.0.145 64.94.237.145
Connecting to services.runescape.com|216.115.77.143|:80... connected.
Created socket 3.
Releasing 0x0000000000f251e0 (new refcount 1).

---request begin---
GET /m=itemdb_rs/api/graph/19227.json HTTP/1.0
Referer: http://www.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Host: services.runescape.com
Connection: Keep-Alive
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
Keep-Alive: 300

---request end---
HTTP request sent, awaiting response... 
---response begin---
HTTP/1.1 200 OK
Date: Sat, 21-Sep-2013 17:22:47 GMT
Server: JAGeX/3.1
Content-type: text/html; charset=ISO-8859-1
Content-Encoding: gzip
Cache-control: no-cache
Pragma: no-cache
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Set-Cookie: settings=wwGlrZHF5gKN6D3mDdihco3oPeYN2KFybL9hUUFqOvk; version=1; path=/; domain=.runescape.com; Expires=Tue, 20-Sep-2016 17:22:47 GMT; Max-Age=94608000
Connection: Keep-alive
Content-length: 1668

---response end---
200 OK
cdm: 1 2 3 4 5 6 7 8
Stored cookie runescape.com -1 (ANY) / <permanent> <insecure> [expiry 2016-09-20 13:22:47] settings wwGlrZHF5gKN6D3mDdihco3oPeYN2KFybL9hUUFqOvk
Registered socket 3 for persistent reuse.
Length: 1668 (1.6K) [text/html]
Saving to: “19227.json”

100%[==============================================================================================================================>] 1,668       --.-K/s   in 0.08s   

2013-09-21 13:22:47 (21.4 KB/s) - “19227.json” saved [1668/1668]
    
por 21.09.2013 / 19:23

Tags