2010-11-25 7 views
0

Ich habe eine URL, die alle Informationen in der URL enthält (Benutzername/Passwort/Inhalt ect)php curl - Zugriff URL über Browser Antwort: 200 Zugriff URL über curl Antwort: 401?

Wenn ich die URL in meinem Browser besuche bekomme ich eine erfolgreiche Antwort.

Jedoch Wenn ich die URL durch curl besuchen komme ich 401.

Es gibt keine Authentifizierung auf der URL ist.

Was könnte das verursachen?

Code:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, $mconnect[$index]['app_name'] . ":" . $mconnect[$index]['app_pass']); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.587.0 Safari/534.12'); 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
curl_setopt($ch, CURLOPT_HTTPGET, true); 
curl_setopt($ch, CURLOPT_POST, false); 
if(curl_exec($ch) === false) 
    echo 'fail: '.curl_error($ch); 


Update ... Seltsam ...

So

Ich baue meine url durch $ MConnect [$ index ] ['url']. "?" . http_build_query ($ url);

was mir die obige URL gibt.

So

Wenn ich

$url = $mconnect[$index]['url'] . '?' . http_build_query($url); 
curl_setopt($ch, CURLOPT_URL, $url); 

ich die 401.

Aber

Wenn ich dann echo $mconnect[$index]['url'] . '?' . http_build_query($url);

bekomme ich

http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678

so, wenn ich

dann
$url = 'http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678'; 
    curl_setopt($ch, CURLOPT_URL, $url); 

Dann funktioniert es ...

irgendwelche Ideen?

+0

sind Sie sicher, dass Sie tun, HTTP-Post/get mit cURL zu bauen ? –

+0

Nur Code hinzugefügt – Hailwood

Antwort

0

Obwohl nicht sicher, warum war das Update der URL selbst anstelle der Verwendung von PHP 5 build_query_string

0

Der Server überprüft wahrscheinlich den Benutzeragenten. Sie müssen wahrscheinlich einstellen, was auch immer Ihr Browser verwendet.

+0

nur Code hinzugefügt, Und ja, ich dachte, das könnte auch der Fall sein, aber nein. – Hailwood

+0

Das ist ein sehr ... neugieriger User-Agent. Versuchen Sie, die zusätzlichen Browser loszuwerden, sie könnten etwas lustiges tun, um dies zu verhindern ... –

+0

Das ist der Google Chrome User Agent. – Hailwood

0

Die Parameter, die Sie senden, müssen möglicherweise über POST gesendet werden.

$posts = array('pass' => 'password', 'body' => 'lots of content'); // ... etc; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $posts); 

Und wenn dies der Fall, dass Sie die CURLOPT_USERPWD Option nicht zu verwenden, benötigen.

+0

nein nicht posten, sonst würde es nicht funktionieren wenn es direkt vom Browser aus aufgerufen wurde. – Hailwood

+0

Es muss sich auf Session/Cookies verlassen. Löschen Sie Ihre Cookies und versuchen Sie dann, direkt darauf zuzugreifen. Ich würde wetten, dass es zu diesem Zeitpunkt nicht funktioniert. –

0

"Es gibt keine Authentifizierung für die URL." aber ich sehe

curl_setopt($ch, CURLOPT_USERPWD, $mconnect[$index]['app_name'] . ":" . $mconnect[$index]['app_pass']); 

ist das nicht für die Authentifizierung?

Hinweis: Sie auch die HTTP-Login-Daten zu senden ähnlichen Versuchen

curl_setopt($ch, CURLOPT_URL, 'http://'.$mconnect[$index]['app_name'] . ":" . $mconnect[$index].'@mconnect.co.nz/v........ 
+0

Nun ja, ich habe es mit und ohne das ausprobiert. – Hailwood

+0

@hailwood .. Sind Sie sicher, dass der Benutzername und das Passwort korrekt sind? Versuchen Sie die alternative Methode, die ich vorgeschlagen habe, um die Authentifizierungsdetails zu senden. –