it-swarm.com.de

PHP - Debugging Curl

Ich möchte sehen, welche Post-Felder in der Anfrage vorhanden sind, bevor ich sie abschicke. (Zum Debuggen).

Die von mir verwendete PHP Bibliothek (Klasse) ist bereits erstellt (nicht von mir), daher versuche ich, sie zu verstehen.

Soweit ich das beurteilen kann, verwendet es curl_setopt(), um verschiedene Optionen wie Header und solche festzulegen, und dann curl_exec(), um die Anfrage zu senden.

Ideen, wie Sie sehen können, welche Postfelder gesendet werden?

193
Matthew

Sie können die Option CURLOPT_VERBOSE Aktivieren:

curl_setopt($curlhandle, CURLOPT_VERBOSE, true);

Wenn CURLOPT_VERBOSE Eingestellt ist, wird die Ausgabe in STDERR oder in die mit CURLOPT_STDERR Angegebene Datei geschrieben. Die Ausgabe ist sehr informativ.

Sie können auch tcpdump oder wireshark verwenden, um den Netzwerkverkehr zu überwachen.

157
netom

Sie können das CURLOPT_VERBOSE Option und protokolliere diese Informationen in einem (temporären) CURLOPT_STDERR:

// CURLOPT_VERBOSE: TRUE to output verbose information. Writes output to STDERR, 
// or the file specified using CURLOPT_STDERR.
curl_setopt($handle, CURLOPT_VERBOSE, true);

$verbose = fopen('php://temp', 'w+');
curl_setopt($handle, CURLOPT_STDERR, $verbose);

Sie können es dann lesen, nachdem curl die Anforderung ausgeführt hat:

$result = curl_exec($handle);
if ($result === FALSE) {
    printf("cUrl error (#%d): %s<br>\n", curl_errno($handle),
           htmlspecialchars(curl_error($handle)));
}

rewind($verbose);
$verboseLog = stream_get_contents($verbose);

echo "Verbose information:\n<pre>", htmlspecialchars($verboseLog), "</pre>\n";

(Ich ursprünglich antwortete ähnlich, aber ausführlicher in einer verwandten Frage.)

Weitere Informationen wie Metriken zur letzten Anfrage erhalten Sie über curl_getinfo . Diese Informationen können auch zum Debuggen von Curl-Anforderungen hilfreich sein. Ein Anwendungsbeispiel, das ich normalerweise in eine Funktion einbinden würde:

$version = curl_version();
extract(curl_getinfo($handle));
$metrics = <<<EOD
URL....: $url
Code...: $http_code ($redirect_count redirect(s) in $redirect_time secs)
Content: $content_type Size: $download_content_length (Own: $size_download) Filetime: $filetime
Time...: $total_time Start @ $starttransfer_time (DNS: $namelookup_time Connect: $connect_time Request: $pretransfer_time)
Speed..: Down: $speed_download (avg.) Up: $speed_upload (avg.)
Curl...: v{$version['version']}
EOD;
377
hakre

Hier ist ein einfacherer Code für das gleiche:

   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_STDERR, $fp);

dabei ist $ fp ein Datei-Handle für die Ausgabe von Fehlern. Zum Beispiel:

   $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');

(Lesen Sie weiter http://curl.haxx.se/mail/curlphp-2008-03/0064.html )

55
Mario S

Dies ist eine noch einfachere Möglichkeit, indem Sie direkt in die PHP-Fehlerausgabe schreiben

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_STDERR, fopen('php://stderr', 'w'));
27
Michaël R

Gehen Sie wie folgt vor, um die Informationen einer CURL-Anforderung abzurufen:

$response = curl_exec($ch);

$info = curl_getinfo($ch);
var_dump($info);
18
Andrew

Eine andere (grobe) Option ist die Verwendung von netcat zum Ausgeben der vollständigen Anforderung:

nc -l -p 8000 -w 3 | tee curldbg.txt

Und natürlich senden Sie die fehlgeschlagene Anfrage an:

curl_setup(CURLOPT_URL, "http://localhost/testytest");

Insbesondere wird dies immer hängen bleiben und fehlschlagen, da Netcat niemals eine gültige HTTP-Antwort erstellen wird. Es ist wirklich nur zum Überprüfen, was wirklich gesendet wurde. Die bessere Option ist natürlich die Verwendung eines http request debugging service .

0
mario

Debug-Informationen an STDERR ausgeben:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option
     */
    CURLOPT_VERBOSE => true,
]);

curl_exec($curlHandler);

curl_close($curlHandler);

Debug-Informationen in Datei ausgeben:

$curlHandler = curl_init();

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/get?foo=bar',
    CURLOPT_RETURNTRANSFER => true,

    /**
     * Specify debug option.
     */
    CURLOPT_VERBOSE => true,

    /**
     * Specify log file.
     * Make sure that the folder is writable.
     */
    CURLOPT_STDERR => fopen('./curl.log', 'w+'),
]);

curl_exec($curlHandler);

curl_close($curlHandler);

Siehe https://github.com/andriichuk/php-curl-cookbook#debug-request

0