Como mudar de POST para entrar em PHP CURL
Pergunta
Eu tentei mudar de um Post solicitação anterior para uma solicitação GET. Que assume a sua a obter, mas, eventualmente, faz um post.
Eu tentei o seguinte em PHP:
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null);
curl_setopt($curl_handle, CURLOPT_POST, FALSE);
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE);
O que eu estou ausente?
Informações adicionais: Eu já tenho uma conexão que está configurado para fazer um pedido POST. Isso é concluído com êxito, mas mais tarde, quando eu tento reutilizar a conexão e mudar de volta para obter usando as setopts acima ainda acaba fazendo um POST internamente com cabeçalhos POST incompletos. O problema é que acredita que o seu fazendo um GET, mas acaba colocando um cabeçalho POST sem o parâmetro conteúdo de comprimento e a conexão falhar witha 411 ERRO.
Solução 3
Resolvido: As mentiras problema aqui:
eu conjunto POST
através tanto _CUSTOMREQUEST
e _POST
e o _CUSTOMREQUEST
persistiram como POST
enquanto _POST
comutada para _HTTPGET
. O servidor assumiu a cabeçada de _CUSTOMREQUEST
ser o caminho certo e voltou com um 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');
Outras dicas
Certifique-se de que você está colocando sua string de consulta no final do seu URL ao fazer uma solicitação GET.
$qry_str = "?x=10&y=20"; $ch = curl_init(); // Set query data here with the URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option instead of passing it in the CURLOPT__URL. ------------------------------------------------------------------------- $qry_str = "x=10&y=20"; curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Set request method to POST curl_setopt($ch, CURLOPT_POST, 1); // Set query data here with CURLOPT_POSTFIELDS curl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str); $content = trim(curl_exec($ch)); curl_close($ch); print $content;
Nota da curl_setopt()
docs para CURLOPT_HTTPGET
(grifo nosso):
[Set CURLOPT_HTTPGET igual a]
TRUE
a reset o método de solicitação HTTP GET.
Desde GET é o padrão, isso só é necessário se o método de solicitação foi alterado.
Adicione esta antes de chamar curl_exec ($ curl_handle)
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');
pedido CURL por padrão é GET, você não tem que definir quaisquer opções para fazer um pedido GET CURL.