Pergunta

Quase qualquer programador PHP trabalhando tem enfrentado ter que usar CURL para enviar solicitações HTTP crus, se é para processamento de cartão de crédito de pagamento, captura de tela nefasto, ou algo in-between.

Quase qualquer fórum onde os programadores PHP reúnem tem um grande número de pessoas que não podem obter as funções CURL para fazer o que querem .

Quando cURL não está funcionando para você, qual a solução de problemas técnicas que você usa para descobrir por que ele não está funcionando? O que gotchas estranhas com a implementação onda de PHP você correr em? Se alguém faz uma pergunta "HALP minha onda IZ quebrado" em um fórum, quais são os passos a tomar para descobrir por que seu pedido não está funcionando?

Foi útil?

Solução

I encontrar a opção CURLINFO_HEADER_OUT para ser muito útil.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';

echo '<fieldset><legend>response</legend>
  <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';

function dbg_curl_data($curl, $data=null) {
  static $buffer = '';

  if ( is_null($curl) ) {
    $r = $buffer;
    $buffer = '';
    return $r;
  }
  else {
    $buffer .= $data;
    return strlen($data);
  }
}

Outras dicas

Na verdade, eu nunca usar CURL (em php). O API corrente PHP é muito mais limpa, e pode ser usado para dados de pós bem. Wez Furlong tem um artigo sobre isso.

Se eu fosse usá-lo? Eu começaria com ligar todas as mensagens (definição de relatório de erros para E_ALL). Se eu achar que o PHP não me o que eu preciso nas mensagens de erro dizer, eu provavelmente usar uma abordagem de proxy para ver o que está realmente acontecendo. Alterar o URL de destino para uma página php local que contém algo como

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

é um caminho. Outra maneira é usar um utilitário como o netcat para escutar na porta 80 e enviar o pedido lá:

netcat -l -p 80

Isso não vai retornar nada de onda, mas vai permitir que você veja exatamente o que é enviado do servidor, o que pode ser suficiente para diagnosticar o problema.

Você também pode recuperar os cabeçalhos de PHP usando o apache_request_headers () função . Na maioria dos casos eu prefiro a abordagem netcat, no entanto, uma vez que garante que eu ver a verdade não modificada, e também exibir os dados pós-prima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top