Retenha o ../../../ no comando wget

0

../../../ é removido quando eu o uso com o comando url in wget . Por favor veja abaixo:

user $ wget http://n0t.meaning.anything:20000/../../../some/folder/file
--2015-10-29 16:48:13--  http://n0t.meaning.anything:20000/some/folder/file
Resolving n0t.meaning.anything (n0t.meaning.anything)... failed: Name or service not known.
wget: unable to resolve host address ‘n0t.meaning.anything’
user $ 

Você pode ignorar a segunda e terceira linha (porque a URL realmente não existe). Mas na primeira linha você vê:

--2015-10-29 16:48:13--  http://n0t.meaning.anything:20000/some/folder/file

Mas meu comando era

wget http://n0t.meaning.anything:20000/../../../some/folder/file

Então você pode ver que ../../../ foi descartado pelo meu shell (ou pelo comando wget).

Como eu mantenho o comando ../../../ in wget?

    
por sps 29.10.2015 / 21:56

2 respostas

2

Eu não acho que você possa sem codificação de URL. wget src/url.c os remove; até onde eu posso dizer de um breve olhar sobre a fonte, não há maneira de contornar isso.

/* Resolve "." and ".." elements of PATH by destructively modifying
   PATH and return true if PATH has been modified, false otherwise.

   The algorithm is in spirit similar to the one described in rfc1808,
   although implemented differently, in one pass.  To recap, path
   elements containing only "." are removed, and ".." is taken to mean
   "back up one element".  Single leading and trailing slashes are
   preserved.

   For example, "a/b/c/./../d/.." will yield "a/b/".  More exhaustive
   test examples are provided below.  If you change anything in this
   function, run test_path_simplify to make sure you haven't broken a
   test case.  */
    
por 29.10.2015 / 22:36
2

RFC3986 §5.4.2 (obrigado @phk) declara:

Parsers must be careful in handling cases where there are more ".." segments in a relative-path reference than there are hierarchical levels in the base URI's path. Note that the ".." syntax cannot be used to change the authority component of a URI.

 "../../../g"    =  "http://a/g"
 "../../../../g" =  "http://a/g"

Os exemplos acima usam URI base http://a/b/c/d;p?q .

http://a/b/c/d/../../../../g (o segundo exemplo) é equivalente a http://a/../g , que (de acordo com o RFC) deve ser resolvido como http://a/g .

Portanto, o analisador de URI de wget (e firefox para esse assunto) está correto ao remover os ../ componentes principais

    
por 29.10.2015 / 22:57