Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jeffersonpd

Migrar via curl para outro sistema

Recommended Posts

Fala galera tudo beleza?

 

Meu problema é o seguinte, tenho 2 sites de vendas um só de carros e outros só de casas


Servidor A - sistema A - vendas de carros

Servidor B - sistema B - vendas de casas

 

Todos os 2 sites tem sistema de cadastros aberto para todos.

 

* servidor A - sistema A - Recebe o cadastro (dados e informações login e senha) nesse sistema o usuário tem a opção de migrar os seus dados para o outro servidor ou seja para o sistema B, quando ele clica em migrar o sistema faz o cadastro na hora usando Curl no sistema B no servidor B até ai tudo bem em consegui fazer! só que.. recentemente eu coloquei uma função de segurança um token de verificação via input, no cadastro do sistema B ai é que tá a cada atualização o token muda de acordo com a sessão já para evitar cadastros de spam.

 

Vou postar aqui o code que faz a migração do sistema A para o B, bem simples.

...Passa as informações e dados para a array....

$cpra = array(

'name' => $name,
'email' => $email,
'password' => $password,
'password_confirm' => $password_confirm,
'estado' => $estado,
'cidade' => $cidade,
'telefone' => $telefone,
'skype' => $skype,
						
);

$timeout = 60;
$myurl = "http://sistemaB.com.br/cadastro.php";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $myurl);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $cpra);
$xml = curl_exec($curl);
curl_close ($curl);

Agora como eu faça para pegar o token válido da página do cadastro do sistema B ? ele está em um input dessa forma!

<input type="hidden" name="token" value="0db40e5a15e272d3e170cd71f298b8f9"/>
 

Alguém ai tem uma ideia de como eu faço isso?

Agradeço!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o token está na página, basta pegar o valor no código-fonte gerado pela requisição HTTP. Dá pra fazer com Expressões Regulares ou usando um parser HTML (pesquise por DOMDocument ou HTML Parser)

 

Mas, se os dois sistemas são seus, sugiro uma saída mais direta. Escreva diretamente no banco de dados ou crie um Web Service.

Se, futuramente, você inserir um CAPTCHA por imagem, esse seu script vai parar de funcionar de novo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo gostei da ideia de fazer uma forma direta vou fazer isso internamente para facilitar, obrigado. :D

 

Mais para caráter de aprendizagem como ficaria essa outra forma usando DOMDocument ou HTML Parser

meu form atual do sistema b está assim! como ficaria para eu acessar com minha curl e captar primeiro o token e depois passar os dados via post isso tudo na mesma sessão.

<form method="POST" action="http://sistemaB.com.br/cadastro.php" accept-charset="UTF-8">
<input name="token" type="hidden" value="PLTESbomsI1llkd70DMeRS5gvSxwk05w1ieUkIgF"><!--//TOK -->

Nome <input placeholder="Nome" class="form-control" name="user_name" type="text">

Email <input placeholder="Email" class="form-control lower-input " name="user_email" type="text">

Senha <input placeholder="Senha" class="form-control" name="user_password" type="password" value="">

Confirmação da Senha <input placeholder="Confirmação da Senha" class="form-control" name="user_password_confirmation" type="password" value="">

Estado <input placeholder="Estado" class="form-control" name="user_state" type="text">

Cidade <input placeholder="Cidade" class="form-control" name="user_city" type="text">

<button class="expand">Cadastrar </button>
</form>

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites
$url = "http://sistemaB.com.br/cadastro.php";
  
  
  $cookie= "cookies.txt";
  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  if (curl_errno($ch)) die(curl_error($ch));
 
  //DOM
  $doc = new DOMDocument();
  $doc->loadHTML($response);
  $token = $doc->getElementsByTagName("token");

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
  curl_setopt($ch, CURLOPT_POST, 1);

  $params = array(
  
'name' => $name,
'email' => $email,
'password' => $password,
'password_confirm' => $password_confirm,
'estado' => $estado,
'cidade' => $cidade,
'telefone' => $telefone,
'skype' => $skype,
'token' => $token
	
  );
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));

  curl_exec($ch);

  if (curl_errno($ch)) print curl_error($ch);
  curl_close($ch);
 

Tentei mais não consegui... onde será o erro. da tela em branco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já ativei todos os logs de erros.. mais não aparece nada.. apenas a pagina em branco e mesmo assim não faz o cadastro.

 

acho que não está pegando o token em tempo de execução ou algo do tipo. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione echo/var_dump nas principais variáveis. Veja se estão recebendo os valores corretos.

Se preferir, use um sistema de logs, parecido com o que mostro neste artigo

 

Já que está usando CURLOPT_RETURNTRANSFER, atribua o retorno de curl_exec a uma variável e exiba o valor dela.

 

Com tudo isso você vai encontrar o ponto onde está falhando

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.