wordpress

Errore cURL in WordPress

Quindi stai provando a utilizzare il tuo plugin WordPress preferito, ma sullo schermo o nel registro errori viene visualizzato un brutto errore cURL 28 … Qualcosa come

errore cURL 28: connessione scaduta dopo X millisecondi

o

cURL error 28: operazione scaduta dopo X millisecondi con 0 su 0 byte ricevuti

Cosa sta succedendo? Se cerchi in Google scoprirai che in effetti è un problema molto comune e non è legato a nessun plugin o WordPress stesso , è qualcosa direttamente correlato a un componente del server, la libreria cURL, quindi può interessare qualsiasi software web che utilizza cURL .

Cose da controllare nel server

cause comuni sul lato server per questo errore sono:

  • Problemi con la risoluzione del DNS (il tuo server non è in grado di risolvere l’IP per il dominio di terze parti o almeno non in tempo).
  • Firewall o moduli di sicurezza (es. mod_security ) che bloccano la richiesta in uscita.
  • Il tuo host non è in grado di “parlare” con il server di terze parti a causa di protocolli richiesti non disponibili . Ciò può verificarsi se il server ha un cURL/OpenSSL recente ma non è configurato correttamente per utilizzare TLS 1.2 come protocollo SSL.
  • Problemi di rete (qualcosa a livello di rete impedisce al server di raggiungere il server di terze parti).
  • Il tuo server sta bloccando le connessioni al tuo sito . Alcuni host non consentono ai siti ospitati nei loro server di connettersi da soli utilizzando cURL. È molto comune per un sito WordPress eseguire connessioni a se stesso (ad es. richieste AJAX) e non vedo alcun motivo valido per applicare questo blocco in un server. Ma per qualche ragione ci sono molti host che lo fanno (specialmente nei piani di hosting economici). Quindi ti consigliamo di contattare il supporto del tuo host su questo e richiedere di rimuovere tale limitazione se è impostata nel server.
  • Qualcosa nella configurazione del sito ha disabilitato la convalida del certificato e l’host non consente le richieste senza la convalida della certificazione .

Queste sono solo alcune cose, le cause più comuni, il tuo amministratore del server dovrebbe essere in grado di controllare tutto ciò che potrebbe causare il fallimento di cURL sul lato server.

Cose da controllare in WordPress quando cURL fallisce

La prima cosa che ti consiglierei di fare è applicare la convalida del certificato utilizzando il filtro https_local_ssl_verify nel file functions.php del tuo tema o un plug-in di funzionalità personalizzato:

<?php
// NOTE: THE CODE TO COPY/PASTE STARTS *BELOW* THIS LINE

// Force certificate validation. You need a valid certificate in the site, self generated certificates are NOT VALID. 

add_filter( 'https_local_ssl_verify', '__return_true' );

Se quanto sopra non aiuta, prova a impostare un valore di timeout più alto. Per impostazione predefinita WordPress imposta il valore di timeout in wp-includes/class-wp-http-curl.php su 5 secondi e lo stesso valore è impostato anche in wp-includes/class-http.php che è una classe più recente per effettuare richieste HTTP che può utilizzare anche cURL se è presente nel server.

Potresti pensare che 5 secondi siano un tempo molto breve, ma in termini di esecuzione di una richiesta HTTP 5 secondi dovrebbero essere sufficienti nella maggior parte dei casi.

In ogni caso questo valore può essere sovrascritto utilizzando alcuni filer core di WordPress: http_api_curl , http_request_timeout o http_request_args . Di seguito puoi trovare un esempio di come impostare il valore di timeout su 30 secondi utilizzando tutti questi filtri.

<?php
// NOTE: THE CODE TO COPY/PASTE STARTS *BELOW* THIS LINE

// Setting a custom timeout value for cURL. Using a high value for priority to ensure the function runs after any other added to the same action hook.
add_action('http_api_curl', 'sar_custom_curl_timeout', 9999, 1);
function sar_custom_curl_timeout( $handle ){
	curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 30 ); // 30 seconds. Too much for production, only for testing.
	curl_setopt( $handle, CURLOPT_TIMEOUT, 30 ); // 30 seconds. Too much for production, only for testing.
}

// Setting custom timeout for the HTTP request
add_filter( 'http_request_timeout', 'sar_custom_http_request_timeout', 9999 );
function sar_custom_http_request_timeout( $timeout_value ) {
	return 30; // 30 seconds. Too much for production, only for testing.
}

// Setting custom timeout in HTTP request args
add_filter('http_request_args', 'sar_custom_http_request_args', 9999, 1);
function sar_custom_http_request_args( $r ){
	$r['timeout'] = 30; // 30 seconds. Too much for production, only for testing.
	return $r;
}

Per risolvere il problema puoi impostare temporaneamente il valore di timeout su un valore pazzesco come 120 secondi solo per vedere se la richiesta HTTP viene completata ad un certo punto… Tieni presente che con questo valore nel timeout dovrai aspettare fino a 2 minuti per vedere il risultato.

Tieni presente che il valore corretto per il timeout sarà direttamente correlato alla quantità di dati che stai inviando nella richiesta cURL. Ad esempio, se stai inviando un piccolo file singolo, che richiederà un valore di timeout basso, se stai inviando un file molto grande o più file, dovrai impostare un valore di timeout più alto .

Related Posts

Leave a comment

Hey, so you decided to leave a comment! That's great. Just fill in the required fields and hit submit. Note that your comment will need to be reviewed before its published.