2010-11-25 37 views
0

J'ai une url qui contient toutes les informations dans l'url (nom d'utilisateur/mot de passe/contenu ect)php curl - url d'accès via la réponse du navigateur: 200 url d'accès via curl réponse: 401?

Si je visite l'URL dans mon navigateur, j'obtiens une réponse positive.

si je visite l'url par boucle je reçois 401.

Il n'y a pas d'authentification sur l'URL.

Ce qui pourrait être à l'origine de cela?

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); 


Mise à jour ... Etrange ...

Ainsi,

Je construis mon URL par mConnect $ [$ index ] ['url']. '?' . http_build_query ($ url);

qui me donne l'URL ci-dessus.

Ainsi,

Si je

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

Je reçois le 401.

Mais,

Si je puis echo $mconnect[$index]['url'] . '?' . http_build_query($url);

Je reçois

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

donc si je puis faire

$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); 

Ensuite, il fonctionne ...

des idées?

+0

êtes-vous sûr que vous faites HTTP après/obtenir l'aide cURL ? –

+0

Juste ajouté le code – Hailwood

Répondre

0

Bien que ne sais pas pourquoi la solution était de construire l'URL moi-même au lieu d'utiliser php 5 de la build_query_string

0

Le serveur vérifie probablement l'agent utilisateur. Vous devez probablement le définir en fonction de ce que votre navigateur utilise.

+0

juste ajouté le code, Et oui, je pensais que cela pourrait être le cas aussi, mais non. – Hailwood

+0

C'est un utilisateur très curieux. Essayez de vous débarrasser des navigateurs supplémentaires, ils peuvent faire quelque chose de drôle pour éviter cela ... –

+0

C'est l'agent utilisateur google chrome. – Hailwood

0

Les paramètres que vous envoyez peuvent devoir être envoyés via POST.

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

Et si tel est le cas, vous n'aurez peut-être pas besoin d'utiliser l'option CURLOPT_USERPWD.

+0

ne pas poster, sinon il ne fonctionnerait pas quand il a été accédé directement à partir du navigateur. – Hailwood

+0

Il doit s'appuyer sur la session/cookies. Effacez vos cookies, puis essayez d'y accéder directement. Je parie que ça ne marche pas à ce moment-là. –

0

"Il n'y a pas d'authentification sur l'URL." Cependant, je vois

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

n'est pas cela pour l'authentification?

Note: Vous pouvez également essayer d'envoyer les informations de connexion HTTP comme celui-ci

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

Eh bien oui, je l'ai essayé avec, et sans cela. – Hailwood

+0

@hailwood .. Êtes-vous sûr que le nom d'utilisateur et le mot de passe envoyés sont corrects? essayez la méthode alternative, j'ai suggéré d'envoyer les détails d'authentification. –