2009-08-04 13 views
63

Próbowałem przełączyć z poprzedniego żądania Post na żądanie Get. Który zakłada, że ​​jest Get, ale ostatecznie robi post.Jak przełączyć się z POST na GET w PHP CURL

Próbowałem następujących w PHP:

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, null); 
curl_setopt($curl_handle, CURLOPT_POST, FALSE); 
curl_setopt($curl_handle, CURLOPT_HTTPGET, TRUE); 

Czego mi brakuje?

Dodatkowe informacje: Mam już połączenie, które skonfigurowałem do wykonania żądania POST. To się kończy pomyślnie, ale później, kiedy próbuję ponownie użyć połączenia i przełączam się z powrotem na GET, korzystając z powyższych zestawów, wciąż kończy się wykonywanie wewnętrznego testu POST z niekompletnymi nagłówkami POST. Problem polega na tym, że robi GET, ale kończy się umieszczaniem nagłówka POST bez parametru długości treści i połączenie nie powiedzie się z 411 BŁĘDEM.

+3

Bądź ostrożny z prośbami o pobieranie. Google świetnie się z nimi bawić. ;) – NotMe

+8

@Chris - znajomy odkrył, że na własnej skórze zbudował witrynę, która zarządzała treściami udostępnianymi przez użytkowników za pośrednictwem żądań GET. Googlebot z przyjemnością śledził wszystkie linki "usuń" z przewidywalnymi wynikami. –

Odpowiedz

28

rozwiązany: Problem leży tutaj:

ustawić POST poprzez zarówno _CUSTOMREQUEST i _POST i _CUSTOMREQUEST trwało jak POST podczas _POST przełączony _HTTPGET. Serwer zakłada nagłówek z _CUSTOMREQUEST być słuszna i wrócił z 411.

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST'); 
86

Upewnij się, że umieszczasz ciąg zapytania na końcu adresu URL podczas wykonywania żądania 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; 

notę ​​curl_setopt() docs do CURLOPT_HTTPGET (podkreślenie)

[Zestaw CURLOPT_HTTPGET równa] TRUE do przywrócić metody żądania HTTP GET.
Ponieważ GET jest wartością domyślną, jest to konieczne tylko w przypadku zmiany metody żądania.

+0

To całkiem zły sposób na ustawienie limitu czasu na 51 sekund! –

+0

Ładne łapanie @JackGoossen! –

39

Dodaj to przed wywołaniem curl_exec ($ curl_handle)

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET'); 
2

CURL domyślnie jest żądanie GET, ty nie trzeba ustawiać żadnych opcji, aby utworzyć żądanie GET CURL.

+0

Nie tędy tutaj ... curl próbuje automatycznie publikować. –