Como salvar um marcador no Firefox com dados do POST?


23

Gostaria de salvar como favorito do Firefox uma página que não é acessível usando GET. A única maneira de recuperar a página é enviar alguns dados do POST.

Por exemplo, gostaria de marcar uma página de rastreamento de encomendas da Chronopost , que só permite ao POST inserir números de encomendas.

Alguém conhece uma extensão do Firefox, ou alguma outra técnica, o que me permitiria fazer isso?


Apenas uma nota nerd: as solicitações GET não devem alterar dados, é por isso que você pode adicioná-las aos favoritos e chamá-las quantas vezes quiser. As solicitações POST podem mudar de estado no servidor, e é por isso que elas não são marcadas com facilidade. Nos links do POST que você marcar, pense se chamá-los várias vezes causará problemas, como a compra de um item extra da Amazon.
Rich Homolka

Respostas:


20

Use um bookmarklet. Por exemplo, você pode usar a ferramenta em http://userjs.up.seesaa.net/js/bookmarklet.html para criar um bookmarklet com o seguinte código:

(function(){
  var post_to_url = function(path, params, method) {
    var openWindow = window.open(path);
    method = method || "post"; 
    var form = openWindow.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    openWindow.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://www.chronopost.fr/transport-express/livraison-colis/engineName/search/accueil/suivi', 
  {search:'test'});
})()

Em seguida, use o link bookmarklet gerado como um marcador em seu navegador favorito. Quando você clica nele, ele abre uma janela, cria um formulário com os parâmetros {search:'test'}e envia esse formulário.

Para alterar o URL e os parâmetros, basta ajustar a última chamada para post_to_url.

Essa estratégia pode ser ótima se você só precisar criar o marcador uma vez e usá-lo várias vezes. No entanto, não facilita muito a criação de novos marcadores, se você precisar fazer isso regularmente.


Você não precisa da pesquisa ao redor em {search: 'test'}?
Anton Daneyko

1
@mezhaka: Não. Como isso está sendo avaliado como javascript, e não como uma string JSON, as aspas em torno dos nomes das propriedades são opcionais, a menos que o nome da propriedade inclua um espaço ou um caractere especial.
StriplingWarrior

1
Obrigado pela resposta. Você, se eu precisar url, citar minha chave: values? Como se eu tivesse espaços ou caracteres não ASCII em minhas chaves e valores, isso seria suficiente para envolvê-lo com '' ou também preciso cuidar de citar símbolos como ö?
precisa saber é o seguinte

@mezhaka: Aqui estão as regras: stackoverflow.com/a/9568622/120955 .
StriplingWarrior

4

Usando a resposta de @StriplingWarrior, alterei um pouco o script para ter o mesmo comportamento dos marcadores normais, abrindo o marcador na mesma janela

(function(){
  var post_to_url = function(path, params, method) {
    method = method || "post"; 
    var form = window.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    window.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'http://192.168.0.1/goform/login', 
  {loginPassword:'password',loginUsername:'admin'});
})()

Usando a ferramenta em http://userjs.up.seesaa.net/js/bookmarklet.html, você pode simplesmente copiar e colar o código, alterar a URL e os parâmetros e adicionar o bookmmarklet gerado aos seus favoritos. Isso é bastante útil para acessar, por exemplo, o painel de controle do roteador.


4

Graças às respostas nesta pergunta, encontrei este belo complemento para o Firefox: Bookmark POST . Falta uma boa documentação, mas isso deve ajudá-lo a começar:

Com esse marcador, são quatro etapas fáceis para sua solicitação POST marcada (sem necessidade de javascript):

  1. Abra a página com o formulário que você deseja marcar e preencha o formulário de maneira "típica". Ainda não envie.
  2. Abra as Ferramentas do desenvolvedor da Web -> Análise de rede.
  3. Envie seu formulário. O envio será exibido na análise da rede. Lá você pode selecionar "Editar e enviar novamente" e copiar o "Corpo da solicitação".
  4. Crie um marcador para a página do formulário e adicione a seqüência POSTDATA={YOUR_REQUEST_BODY_HERE}como descrição dos indicadores .

Para mim, isso é muito mais fácil do que mexer com Javascript.


Excelente resposta, mas não funcionou em Waterfox 56,2
Euri Pinhollow

3

Abordagem mais simples:

Bookmarklet com formulário preenchido e carregamento automático

javascript:'<html><body onload="document.forms[0].submit()"><form action="http://www.example.com" method="POST"><input name="whatever" value="whatever" type="hidden"></form></body></html>'

Desvantagem: o Chromium enviaria o URL da página atual como referenciador HTTP. (Firefox e IE não.)

Por que o referenciador é importante? Sem levar em conta as preocupações com a privacidade, alguns sites verificariam o referenciador no POST para se protegerem de solicitações maliciosas feitas por postagem de formulário iframe oculta.

Abordagem alternativa:

Descrito aqui , é um pouco mais legível, mas precisa de arquivo HTML em algum lugar, o uso será como:

file:///C:/getToPost?name1=value1&name2=value2#http://url.com/service

Ao trabalhar com um arquivo salvo localmente, o referenciador não será enviado. Mesmo em cromo.
Se o arquivo for colocado em um site remoto, o referenciador será enviado e conterá o host do site e a string de consulta original.


2

O bookmarklet frmget funciona para muitos sites que são indiferentes ao método http: aplique o bookmarklet, envie o formulário, adicione a página de resultados aos favoritos.

Para sites que exigem POST, existe esta extensão , que não é muito fácil de usar. Você pode combiná-lo com o frmget: aplique o frmget, envie o formulário, adicione a página aos favoritos, copie os parâmetros GET no campo de descrição, com o prefixo POSTDATA=.


1

Modifiquei um pouco o script fornecido pelo @StriplingWarrior para aceitar um arquivo HAR como parâmetro. O arquivo HAR pode ser salvo nas Ferramentas do desenvolvedor do Chrome (Ctrl + Shift + J).

Primeiro abra a página com os dados do formulário já publicados, clique com o botão direito do mouse no primeiro documento na guia Rede e selecione "Copiar entrada como HAR". Em seguida, cole o conteúdo no script abaixo:

<html><body><script>
function dopost() {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", har["request"]["url"]);
var params = har["request"]["postData"]["params"];
for(var e in params) {
    var hiddenField = document.createElement("input");
    hiddenField.setAttribute("type", "hidden");
    hiddenField.setAttribute("name", params[e]["name"]);
    hiddenField.setAttribute("value", params[e]["value"]);
    form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
}
window.onload=dopost;

var har=
//-----PASTE HERE------

</script>
</body></html>

Salve isso como um arquivo html e ele deverá abrir o formulário publicado. Isso não funciona se o site usa o viewstate ou se verifica o referenciador.



0

Pelo que entendi sobre a postagem, não há como gravar esses dados e enviá-los novamente.

Sugiro obter um complemento que preencha formulários para você melhor do que o Firefox, por padrão.

O Chrome realmente possui um recurso de reconhecimento e preenchimento de formulários muito poderoso, mas tenho certeza de que existe um complemento do Firefox que faz a mesma coisa.

Experimente este, parece promissor: Complemento de Form Saver Firefox


Mas, infelizmente, o Chrome não oferece salvar senhas para páginas HTTP AUTH genéricas.
qroberts

Lázaro é melhor do que o protetor de forma hoje em dia.
Tobu


0

Com base no bookmarklet do usuário :

Isso parece funcionar para a UPS com Firefox e uma palavra-chave para a barra de pesquisa (por exemplo, "ups XYZ", em que o XYZ entra no diretório %s espaço reservado dentro do bookmarklet):

javascript:'
<html><body%20onload="document.forms[0].submit()">
  <form%20action="https://wwwapps.ups.com/WebTracking/track"%20method="POST">
  <input%20name="trackNums"%20value="%s"%20type="hidden">
  <input%20name="track.x"%20value="anything"%20type="hidden">
  </form>
</body></html>'

(note que deve ser uma linha)

Veja também:

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.