Frage Wie kann ich herausfinden, welche URL in curl_multi_exec fehlgeschlagen ist?


Ich habe eine Klasse geschrieben, um die Verwendung mehrerer cURL-Anfragen einfacher zu machen. Ich möchte Fehler protokollieren, wenn ein 404-Fehler oder ein anderer Fehler auftritt. ich habe schon CURLOPT_FAILONERROR auf wahr gesetzt.

Ich benutze derzeit curl_multi_info_read().

und das ist mein Code:

$active = null;
    do {
        $multi_exec = curl_multi_exec($this->_multi_handle, $active);
    } while ($multi_exec == CURLM_CALL_MULTI_PERFORM);

    while ($active && $multi_exec == CURLM_OK) {
        if (curl_multi_select($this->_multi_handle) != -1) {
            do {
                $multi_exec = curl_multi_exec($this->_multi_handle, $active);
                $info = curl_multi_info_read($this->_multi_handle);
                if ( $info['result'] != 0 ) {
                    $this->_errors[] = $info; // currently storing the whole array
                }
            } while ($multi_exec == CURLM_CALL_MULTI_PERFORM);
        }
    }

Das Ergebnis bei einem Fehler ist ein Array wie folgt:

Array
(
    [0] => Array
        (
            [msg] => 1
            [result] => 22 // on success this is 0
            [handle] => Resource id #4 // does this help in finding the url if I have the handle ID ?
        )

Wie kann ich die URL erhalten, an der der Fehler aufgetreten ist? Dies gibt mir nur die Handle-Ressource-ID

und danke im voraus.


6
2017-09-29 14:51


Ursprung


Antworten:


Je nachdem, was Sie tatsächlich benötigen, können Sie diesen Punkt an beide übergeben curl_error oder curl_errno Funktion auf Fehler zu prüfen, und Sie können verwenden curl_getinfo um die URL von diesem Handle zu extrahieren:

curl_getinfo($info['handle'], CURLINFO_EFFECTIVE_URL);

9
2017-09-29 14:55