Frage

Fast jeder Arbeit PHP-Programmierer hat konfrontiert mit CURL verwenden rohe HTTP-Anforderungen zu senden, wäre es für die Kreditkartenzahlungsabwicklung, schändliches Screen Scraping oder etwas dazwischen.

Fast jedes Forum, in der PHP-Programmierer versammeln sie eine große Anzahl von Menschen hat, die nicht die Curl-Funktionen erhalten können zu tun, was sie wollen .

Wenn cURL ist nicht für Sie arbeiten, welche Techniken zur Fehlerbehebung nutzen Sie, um herauszufinden, warum es nicht funktioniert? Was seltsam gotchas mit PHP curl Implementierung haben laufen Sie in? Wenn jemand eine „HALP MY ROTATION IZ BROKEN“ Frage in einem Forum fragt, was sind die Schritte, die Sie ergreifen, um herauszufinden, warum ihre Anfrage nicht?

War es hilfreich?

Lösung

Ich finde die CURLINFO_HEADER_OUT Option sehr nützlich sein.

<?php
$curl = curl_init('http://www.php.net');

curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLOPT_WRITEFUNCTION, 'dbg_curl_data');
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_exec($curl);

echo '<fieldset><legend>request headers</legend>
  <pre>', htmlspecialchars(curl_getinfo($curl, CURLINFO_HEADER_OUT)), '</pre>
</fieldset>';

echo '<fieldset><legend>response</legend>
  <pre>', htmlspecialchars(dbg_curl_data(null)), '</pre>
</fieldset>';

function dbg_curl_data($curl, $data=null) {
  static $buffer = '';

  if ( is_null($curl) ) {
    $r = $buffer;
    $buffer = '';
    return $r;
  }
  else {
    $buffer .= $data;
    return strlen($data);
  }
}

Andere Tipps

Eigentlich habe ich nie ROTATION verwenden (in PHP). Der PHP-Stream api ist viel sauberer, und kann verwendet werden, als auch POST-Daten. Wez Furlong hat einen Artikel darüber.

Wenn ich es zu benutzen waren? Ich würde mit dem Einschalten alle Nachrichten (Einstellung Fehlerberichterstattung auf E_ALL) starten. Wenn ich finde, dass PHP nicht mir sagen, was ich in den Fehlermeldungen benötigen, würde ich wahrscheinlich einen Proxy-Ansatz verwenden, um zu sehen, was wirklich vor sich geht. Ändern der Ziel-URL auf eine lokale PHP-Seite enthält so etwas wie

<?php
var_dump($_POST);
var_dump($_GET);
var_dump($_SERVER);

ist eine Möglichkeit. Eine andere Möglichkeit ist ein Dienstprogramm wie netcat zu verwenden, um auf Port 80 zu hören und die Anfrage senden es:

netcat -l -p 80

Das wird nichts zurück zu locken, aber es ermöglicht es Ihnen, genau zu sehen, was den Server gesendet wird, die genug sein könnte, um das Problem zu diagnostizieren.

Sie können auch die Header von PHP mit dem Abrufen von apache_request_headers () Funktion. In den meisten Fällen ziehe ich den netcat Ansatz, obwohl, da es gewährleistet, dass ich die unveränderte Wahrheit zu sehen, und auch die rohen Post-Daten angezeigt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top