Wget obtendo a resposta 403

0

Estou usando uma API com alguns limites de solicitações em uma hora. Mas meu script faz tudo de uma vez, então eu perco cerca de 1/3 dos pedidos porque eu tenho 403.

Existe alguma maneira de verificar a resposta do wget e se eu conseguir 403 para esperar 5 minutos e tentar novamente?

E aqui está o meu (por agora) código de teste:

system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");
$test = system ("wget \"http://test-link.com/403/\" -O  {$dir}/{$in_dir_counter}.xml");

echo "responsed - ".$test;      

ambos retornam mesmo.

    
por user270181 07.11.2013 / 11:41

1 resposta

0

Que tal usar um script simples para isso:

  • Execute o script uma vez a cada 5 minutos, a menos que já esteja em execução.
  • Verifique a idade do arquivo local. Se for mais antigo que um limite específico, faça o download novamente.

Então, se tudo for suave, nada acontece, a menos que um arquivo esteja desatualizado. Se um arquivo estiver desatualizado e falhar no download, você poderá tentar novamente na próxima Iteração.

Eu não tenho certeza porque você marcou isso com php , mas se você está realmente executando um script PHP esta abordagem é bastante fácil de fazer (dado que você tem web sockets habilitados):

foreach($files as $file)
    if (@filemdate($local_path + $file) + $cache_duration < time())
        @copy($remote_path + $file, local_path + $file);

Observe que $remote_path pode, de fato, ser um URL HTTP ou FTP. Não há necessidade de invocar o wget. O @ impedirá que mensagens de erro sejam impressas.

Para provar que isso não causará espera desnecessária:

  • Suponha que você tenha 1000 arquivos para download, mas só pode fazer o download de até 250 arquivos por hora.
  • Defina cache_duration para um tempo de salvamento onde você obterá todos os arquivos, como 24h ( 24 * 60 * 60 ).
  • Execute novamente o script acima a cada hora.
  • A primeira iteração dos primeiros 250 arquivos será atualizada. Os outros vão falhar.
  • A segunda iteração dos primeiros 250 arquivos será ignorada (por ser recente o suficiente) e os próximos 250 arquivos serão baixados.
  • Após a quarta iteração, você terá todos os 1000 arquivos atualizados / baixados.
  • É claro que você pode definir um intervalo mais curto, como 5 minutos, mas isso criará muito mais solicitações / tráfego (depende se isso é aceitável).

Idéia alternativa de script:

  • Tente baixar um arquivo.
  • Se falhar, você poderá determinar isso com base no valor de retorno / código de saída do wget. Então, nesse caso, espere 5 minutos e repita.
por 07.11.2013 / 12:04