2010-10-06 6 views
0

Je suis donc débutant dans tout cela. J'essaye de m'enseigner comment utiliser correctement CURL, et d'essayer un peu les appels d'API (ne vous inquiétez pas, cette question concerne uniquement l'utilisation de CURL).Demande CURL Numéro

Maintenant, mon code d'origine fonctionnait très bien - j'ai structuré la demande à l'aide urlencode, et la grande majorité des demandes plombés aux réponses que je cherchais. Cependant, environ 10% des réponses reçues ne permettraient pas d'obtenir les résultats dont j'avais besoin. Permettez-moi de donner un exemple:

$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL(); 
$response = ConnectionUtil::makeRequest($urlToFetch); 

En utilisant le code ci-dessus générerait un urlToFetch $ avec les données suivantes: http://lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY

Ce passe par CURL et obtient une réponse de l'API SEOmoz - la réponse, cependant, il manque des données. J'ai fourré autour, et a constaté que c'est un problème avec la façon dont l'URL est structurée. Par exemple, en changeant la valeur de www.alinki.com%2Fdomainlinks.php%3Fpage%3D516000 à www.alinki.com/domainlinks.php?page=516000 je peux récupérer tous les champs que je cherche. Aller par cette logique, je devrais être capable de structurer une URL semblable à: (j'enlever le http puisque je ne peux pas poster plus d'un lien) lsapi.seomoz.com/linkscape/url-metrics/www.alinki.com/domainlinks.php?page=516000?AccessID=XXXXXX&Expires=1286388878&Signature=YYYYYYYYY et récupérer tous les domaines dont j'ai besoin. Le problème est que, lorsque je tente de transmettre cette URL à CURL, la requête ne sera pas complète. Ci-dessous le code utilisé pour la demande de CURL:

public static function makeRequest($urlToFetch) 
{ 
$curl_handle = curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, "$urlToFetch"); 
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, ConnectionUtil::CURL_CONNECTION_TIMEOUT); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 

$buffer = curl_exec($curl_handle); 
//var_dump($buffer); 
curl_close($curl_handle); 

$arr = json_decode($buffer); 

return $arr; 
} 

Et je demande comme suit:

$urlToFetch = "http://lsapi.seomoz.com/linkscape/url-metrics/" . urlencode($objectURL) . "?" . $this->structureURL(); 
    $response = ConnectionUtil::makeRequest($urlToFetch); 

Des idées sur ce erreur stupide que je fais?

+0

Que voulez-vous dire par « ne remplissez pas la demande »? Curl échoue? Le serveur distant renvoie une page d'erreur à la place des données souhaitées? –

Répondre

0

Essayez d'utiliser http_build_query au lieu de urlencode pour générer votre chaîne de requête. Il semble que le code seomoz ne gère pas correctement les données urlencodées.

Questions connexes