DanielC: cURL Basic Auth versagt bei POST

Liebe SELFHTMLer,
ich versuche, aus einem PHP-Skript heraus eine API-Funktion eines Servers aufzurufen, die zum einen eine einfache Authentifizierung erfordert und zum anderen einige POST-Variablen erwartet. Dazu verwende ich cURL.

  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);  
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pw");  
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);  
$result = curl_exec($ch);  
curl_close($ch);  

Kommentiere ich die beiden POST-Zeilen aus, funktioniert alles wunderbar. Sobald ich sie wieder hinzunehme, meldet der Server im Log einen Zugriff mit falschem Passwort. Was mache ich falsch?

Danke im Voraus und Grüße

Daniel

  1. Hi,

    ich versuche, aus einem PHP-Skript heraus eine API-Funktion eines Servers aufzurufen, die zum einen eine einfache Authentifizierung erfordert und zum anderen einige POST-Variablen erwartet. Dazu verwende ich cURL.
    [...]
    Kommentiere ich die beiden POST-Zeilen aus, funktioniert alles wunderbar. Sobald ich sie wieder hinzunehme, meldet der Server im Log einen Zugriff mit falschem Passwort.

    Bist du denn *sicher*, dass die Ressource, wenn sie per POST angefordert wird, auch wirklich Basic Authentication verwendet?

    Wie sieht's aus, wenn du mal CURLAUTH_ANYSAFE als Wert für CURLOPT_HTTPAUTH setzt?

    Hast du es mal mit veränderter Reihenfolge probiert - HTTPAUTH/USERPWD als erste setzen?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hast du es mal mit veränderter Reihenfolge probiert - HTTPAUTH/USERPWD als erste setzen?

      Danke, die Reihenfolge hat es gebracht!

      Daniel

      1. Hi,

        Hast du es mal mit veränderter Reihenfolge probiert - HTTPAUTH/USERPWD als erste setzen?

        Danke, die Reihenfolge hat es gebracht!

        Vermutung: die Sachen werden direkt auf die Leitung geschickt. Bei Post sind die Daten im body. Und sobald der body angefangen ist, können keine Header mehr kommen, werden daher entweder nicht mehr geschickt oder als Teil des body ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Hi!

          Hast du es mal mit veränderter Reihenfolge probiert - HTTPAUTH/USERPWD als erste setzen?
          Danke, die Reihenfolge hat es gebracht!
          Vermutung: die Sachen werden direkt auf die Leitung geschickt. Bei Post sind die Daten im body. Und sobald der body angefangen ist, können keine Header mehr kommen, werden daher entweder nicht mehr geschickt oder als Teil des body ...

          Es scheint, dass einige Optionen voneinander abhängig sind und deshalb mitunter eine Reihenfolge eingehalten werden muss. Userkommentare wie jener stehen sicher nicht umsonst da. Aber dass eine generelle Reihenfolge einzuhalten wäre, die sich am HTTP-Request (oder den anderen unterstützten Protokollen) orientiert, halte ich für sehr unwahrscheinlich. Denn dann wäre eine Funktion namens curl_exec() nicht nur nicht notwendig sondern auch irgendwie irreführend benannt, weil der Request ja dann schon in vollem Gange sein müsste. Außerdem dürfte dann die Übergabe von CURLOPT_URL als letzte Option vor dem curl_exec() sowie nach anderen Header beeinflussenden Optionen nicht gehen. Das war aber eben in meinem Test problemlos möglich.

          Lo!