cURL Basic Auth versagt bei POST
DanielC
- php
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
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
Hast du es mal mit veränderter Reihenfolge probiert - HTTPAUTH/USERPWD als erste setzen?
Danke, die Reihenfolge hat es gebracht!
Daniel
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
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!