Notícias:

SMF - Just Installed!

Menu principal

html.PasseFormularioWebKit()

Iniciado por rafael, Março 07, 2018, 04:16:13 AM

tópico anterior - próximo tópico

rafael

Bom dia!

fiz uma biblioteca pra passar o formulário "boundary" do método POST.

Como ele pode receber vários conteúdos ao mesmo tempo fiz um laço contando as posições.

O retorno pode ser uma tabela ou pegar diretamente um par: chave = valor

Se quiser pode incluir ela no html ou no cgi



funcao PasseFormularioWebKit(cadeia,chave)
cadeia = [[------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="ArquivoDeRetorno"; filename="4155_00154695_20180220_C240_00.ret"
Content-Type: application/octet-stream

                           rafael
------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo1"; filename="arquivo1.txt"
Content-Type: text/plain

Conteúdo do texto

------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="arquivo2"; filename="arquivo2.html"
Content-Type: text/html

<!DOCTYPE html><title>Conteúdo do html</title>

------WebKitFormBoundaryDCkEyCJwVlL5BGuC
Content-Disposition: form-data; name="conteudoJSON"
Content-Type: application/json

{"Objeto":"objetoJSON","chave":"Isso é uma tabela em prisma"}

------WebKitFormBoundaryDCkEyCJwVlL5BGuC--]]

 
  pi = {};
  pf = {};
  x = 1;
  pos_busca = 1; //ponto inicial da busca

  se Metodo == 'GET' entao erro('____________________Metodo suportado somente: POST____________________') fim




  enquanto 1 inicio //cria um laço infinito
      linha = cadeia:separe('^(.-)[\r\n].*$') ou ''
      se pos_busca ==1 e linha:procure('WebKitFormBoundary') entao
        codigoinicial = linha
      fim
      se nao codigoinicial  entao
        quebre erro('____________________NÃO É WebKitFormBoundary____________________')
      fim
      pi[ x ] , pf [ x ] = string.procure ( cadeia , codigoinicial , pos_busca );
      se pi[x] == nulo entao 
    //se o retorno de pi for nulo entao interrompe o laço
      quebre
      senao //senao salva uma nova posicao de busca
          pos_busca = pf [ x ] + 1;
      fim;
  x = x + 1;
  //fazendo o incremento de x
  fim


  Matriz = {}

  para i = 1 , #pi-1  inicio
        //imprima( 'Busca numero ' .. i .. ' : ' .. pi[ i ]  .. ' - ' .. pf [ i ] );
    conteudo = string.corte(cadeia,pf[i]+2,pi[i+1]-2)
    linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
      nome = conteudo:separe('name=["](.-)[";].*$') ou ''
      nomedoarquivo = conteudo:separe('filename=["](.-)[";].*$') ou ''
      disposicao = conteudo:separe('Content%-Disposition: (.-[^;\r?\n]+).*$') ou ''
      conteudo = conteudo:corte(#linha+2,#conteudo)
      linha = conteudo:separe('^(.-)[\r?\n].*$') ou ''
      tipo_conteudo = conteudo:separe('Content%-Type: (.-[^;\r?\n]+).*$') ou ''
      conteudo = conteudo:corte(#linha+2,#conteudo):apare()
      linha = conteudo:separe('^(.-)[\r?\n?].*$')
      se linha == ('') entao
        conteudo = conteudo:corte(#linha+2,#conteudo):apare()
      fim
      Matriz[i] = {}
      Matriz[i]['Nome'] = nome
      Matriz[i]['NomeDoArquivo'] = nomedoarquivo
      Matriz[i]['Disposicao'] = disposicao
      Matriz[i]['TipoDeConteudo'] = tipo_conteudo
      Matriz[i]['Conteudo'] = conteudo
  fim

  se chave entao
    local valor = nulo
    para i,v em pares(Matriz) inicio
          se nao valor entao
            valor = v.Nome == chave
            se valor entao valor = v.Conteudo fim
          fim
        fim
        retorne valor
  senao
    retorne Matriz
  fim

fim


ArquivoDeRetorno  = PasseFormularioWebKit(Formularios,'ArquivoDeRetorno')
conteudoJSON  = PasseFormularioWebKit(Formularios,'conteudoJSON')
arquivo1  = PasseFormularioWebKit(Formularios,'arquivo1')
imprima(ArquivoDeRetorno)
imprima(conteudoJSON)
imprima(arquivo1)


adalberto