Fazer o download de anexos em um redirecionamento de URL via Axel

2
O

Axel não resolve URLs que redirecionam para outro URL que tenha o arquivo como anexo. Como você pode ver, estou recebendo 404 quando tento fazer o download dessa URL. (site original é substituído por example.com)

~  ▶ axel https://eusa.example.com/zipstream/1581777.zip?tunnel=1&token=b7385bb62e3111e3ace1002481265109&storage=s09
[2] 767
[3] 768
Initializing download: https://eusa.example.com/zipstream/1581777.zip?tunnel=1
[1]   Exit 1                  axel https://eusa.example.com/zipstream/1581777.zip?tunnel=1
[3]+  Done                    token=b7385bb62e3111e3ace1002481265109
~  ▶ HTTP/1.1 404 Not Found

As documentações do website descrevem o redirecionamento de URL da seguinte forma:

First response is always a redirect. Location of the file is in ‘Location’ header. The client must send a new GET request to the new location. Only headers are shown.

HTTP/1.1 302 FOUND
Server: nginx
Date: Thu, 09 Feb 2012 15:58:53 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Content-Length: 385
Location: http://s01.example.com/v2/files/26205116/download?oauth_token=4a63387841ce11e1a047001018321b64

vai para:

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 09 Feb 2012 15:58:53 GMT
Content-Type: application/x-rar
Content-Length: 3190802
Last-Modified: Fri, 16 Sep 2011 11:42:13 GMT
Connection: keep-alive
Keep-Alive: timeout=60
Content-Disposition: attachment; filename="file.rar"
Accept-Ranges: bytes

curl é capaz de fazer o download do URL. Mas axel me dá 404. Eu quero ter o recurso multi-conexão do Axel. Como posso usar o curl apenas para resolver o URL e passar a tarefa de download para axel ?

    
por Mohsen 14.12.2013 / 05:11

1 resposta

4

Quoting issue?

Tente colocar o URL em axel entre aspas simples. O Bash está tentando analisar o & nos argumentos do parâmetro na URL enquanto você diz ao segundo plano o comando.

$ axel 'https://eusa.example.com/zipstream/1581777.zip?tunnel=1&token=b7385bb62e3111e3ace1002481265109&storage=s09'

Rastreador de bugs do Axel

Examinando a lista de bugs abertos para o Axel, parece que esse problema foi identificado anteriormente e o autor parece não estar respondendo ao problema.

Veja estes problemas para mais detalhes :

Dado o tempo que passou sem nenhum movimento sobre esses problemas, eu consideraria este projeto morto. Ainda pode ser utilizável, mas não há ninguém dirigindo.

Isso não é incomum no mundo do software livre e é, na verdade, o que torna esse modelo de licenciamento exclusivo, no sentido de que você pode pegar o código-fonte em um projeto nesse estado e continuar a usá-lo e a manter. você mesmo.

O código-fonte deste projeto pode ser facilmente baixado via svn . Repo de código do projeto:

  • Axel SCM: svn: //svn.debian.org/svn/axel/
  • WebSVN: link
  • ViewSVN: link

Download de & compilação

Você pode fazer o download de uma cópia do repositório da seguinte forma:

$ svn co svn://svn.debian.org/svn/axel/

Na minha caixa do Fedora 19, o código é configurado e compilado perfeitamente para que este projeto esteja realmente em bom estado, se alguém quiser modificar a base de código.

configure

$ ./configure
Configuration done:
  Internationalization enabled.
  Debugging disabled.
  Binary stripping enabled.

faça

$ make
msgfmt -vo nl.mo nl.po
40 translated messages, 6 fuzzy translations, 4 untranslated messages.
msgfmt -vo de.mo de.po
46 translated messages, 4 fuzzy translations.
msgfmt -vo ru.mo ru.po
46 translated messages, 2 fuzzy translations, 2 untranslated messages.
msgfmt -vo zh_CN.mo zh_CN.po
42 translated messages, 6 fuzzy translations, 2 untranslated messages.
gcc -c axel.c -o axel.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c conf.c -o conf.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c conn.c -o conn.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c ftp.c -o ftp.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c http.c -o http.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c search.c -o search.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c tcp.c -o tcp.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc -c text.c -o text.o -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Os  -Wall
gcc *.o -o axel -pthread
strip axel

Consegui compilá-lo e obtive um binário perfeitamente utilizável de axel .

$ ls -l | grep "axel$"
-rwxrwxr-x. 1 saml saml 35816 Dec 14 21:56 axel

Modificando a base de código?

A seção de código que eu acredito que você gostaria de focar estaria aqui no arquivo conn.c :

                conn_exec( conn );
                conn_disconnect( conn );
                /* Code 3xx == redirect                         */
                if( conn->http->status / 100 != 3 )
                        break;
                if( ( t = http_header( conn->http, "location:" ) ) == NULL )
                        return( 0 );
                sscanf( t, "%255s", s );
                if( strstr( s, "://" ) == NULL)
                {
                        sprintf( conn->http->headers, "%s%s",
                                conn_url( conn ), s );
                        strncpy( s, conn->http->headers, MAX_STRING );
                }

C / C ++ não é minha "língua" nativa, então eu teria que começar executando este código através de gdb (também conhecido como o Depurador GNU) ou inserir algumas declarações printf ao redor desta seção para ver o que está acontecendo quando axel acessa as URLs com as quais você está tendo problemas.

    
por 14.12.2013 / 05:24