enviar formulário com cURL às vezes funciona, às vezes não

1

Eu uso este comando para preencher um formulário no Drupal 6 (criar nó):

curl -b cookies.txt -d "title=thetitle&menu%5Blink_title%5D=&menu%5Bparent%5D=primary-links%3A0&menu%5Bweight%5D=0&teaser_include=1&body=content+here&format=1&changed=&form_build_id=form-01fbf44be3dab1ea177d17544bce415c&form_token=f1af1b01946065a34e49fdbde8fcc64b&form_id=story_node_form&log=&comment=2&pathauto_perform_alias=1&field_pidio%5B0%5D%5Bembed%5D=&name=admin&date=&status=1&promote=1&op=Save" http://localhost/subdo/node/add/story

Funciona sem nenhum problema; nenhuma mensagem no terminal e o nó é criado no Drupal conforme o esperado.

Depois de um tempo, eu uso esse código novamente sem qualquer modificação. Mas, em vez de postar um novo nó, o terminal mostra o código HTML do formulário. Parece que o cURL não está pressionando o botão "Salvar".

    
por lokomika 24.07.2011 / 10:27

1 resposta

1

Os formulários do

Drupal geralmente são assuntos de duas etapas que requerem um estágio de pré-visualização / aprovação. O formulário que você está vendo é idêntico e pré-preenchido com os valores que você enviou do primeiro, mas também haverá uma prévia da ação na página e um campo de formulário oculto que indica que o próximo envio do formulário está sendo enviado da pré-visualização, para que os dados sejam realmente salvos.

A diferença é tipicamente o nome do botão de envio. Nos formulários que exigem pré-visualização, o botão enviar passará a operação como op=Preview e, no formulário da página de pré-visualização, enviará op=Save . A boa notícia é que, na verdade, ele não rastreia esse estágio de visualização no lado do servidor, ele apenas usa dicas do formulário para saber em que etapa você está. Ao enviar com uma forma automatizada como você está tentando fazer como curl , você pode pular direto para a economia real, incluindo o envio de op=Save em vez de usar o valor do formulário inicial.

Além disso, os formulários Drupal geralmente são rastreados usando um identificador ou token exclusivo. Para enviar esses formulários automaticamente, você precisará fazer o download da página com curl , analisá-la para o campo de formulário que contém o token exclusivo (chamado form_token em DP7 ) e incluir isso par chave / valor no seu POST.

Pelo menos em Drupal 7 você não deve ter problemas combinando estas técnicas. O token do formulário não é alterado da visualização para a final, portanto, depois de buscar o token, você pode pular direto para o POST final de salvamento.

    
por 26.07.2011 / 22:51

Tags