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.

Foi útil?

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.

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