transmission des informations d'identification en PHP cURL aider
Je suis en train de transmettre des informations d'identification d'un site web afin que je puisse utiliser file_get_contents sur elle pour en extraire des données, mais il ne fonctionne pas, j'obtiens une page blanche donc aucune idée de ce qu'est le problème ici?
<?php
$username="[email protected]";
$password="Koin";
$url="confluence.rogersdigitalmedia.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
$str= file_get_contents("confluence.rogersdigitalmedia.com/display/prodsupport/Team+Calendar");
echo $str;
?>
Voici le nouveau code, il n'y a toujours pas collé à l'écran de connexion quand je fais des matières....
<?php
$username="[email protected]";
$password="Koin";
$url="confluence.rogersdigitalmedia.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Replaced due to special chars in url for username and pass
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_USERPWD, urlencode($username) . ':' . urlencode($password));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
echo file_get_contents('http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407');
?>
Nouveau code: je sais $url
est l'URL que j'ai à l'ouverture, mais que dois-je mettre dans $data
? Je sais que c'est mon login info, mais comment dois-je les mettre (par exemple, <username> espace <mot de passe>)?
<?php
function do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array(
'method' => 'POST',
'content' => $data
));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
Ce qui ne l'-têtes de Réponse HTTP ressembler? Quel est le statut que vous obtenez en retour du serveur?
OriginalL'auteur Bulvak | 2011-06-08
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement besoin d'échapper à la@
dans le nom d'utilisateur:C'est parce que certains caractères (comme@
et:
) ont des sens spéciaux dans les Url. Vous devez vous échapper de sorte que le serveur va les traiter comme les personnages, plutôt que d'indiquer quelque chose au sujet de la requête HTTP.De la ferraille. Votre modifier montre que vous avez une méconnaissance fondamentale sur la façon dont le HTTP fonctionne. Vous ne pouvez pas utiliser CURL pour passer HTTP identifiants de connexion à un site qui s'attend à un web formulaire à remplir et puis attendre d'être en mesure de se connecter avec
file_get_contents
(qui fait partie d'un tout distinct de l'API).En termes de la façon dont vous avez réellement le faire... d'Abord, savoir si le site dispose d'une API. Si ce n'est pas de savoir si ils veulent vraiment vous être grattage d'écran. Il serait très mauvaise forme de l'écran de gratter un site web qui ne le permettrait pas. Il se pourrait bien en effet être une violation du droit d'auteur.
Seconde, le programme de l'API. Cela signifie connexion dans la façon dont le site applique. Ce sera avec les valeurs d'un formulaire (que vous devrez envoyer
CURLOPT_POSTFIELDS
, probablement) et des témoins (vous aurez besoin d'utiliser à chaque demande, probablement à l'aide deCURLOPT_COOKIEFILE
).Travailler à la compréhension de la façon dont le client-serveur de relation fonctionne, l'étude de l'API et de ne pas chuck code sur le problème et espérer qu'il fonctionne.
Vous devez vous escape la valeur, de sorte que le serveur se rend compte que la
@
personnage fait partie du nom d'utilisateur. Si vous n'avez pas l'encoder, le serveur pense que le nom d'utilisateur estokh
et le serveur estring.gil.com:[email protected]
.Comment est-il maintenant? J'ai édité comme vous l'avez dit (ou au moins je pense que j'ai fait si je me trompe, corrigez-moi) et je reçois toujours le même écran de connexion
Jetez un oeil à ma mise à jour de réponse.
Itsn ot droit de copie de la loi, le site appartient à la société, je suis à la mais il est hébergé en externe et nécessite une connexion authentifiée par la société, que j'ai tout ce que je besoin est de lire des données à partir d'un calendrier, telles qu'un nom....Je suis coincé sur ce à partir de 4 semaines, je veux juste m'en débarrasser..merci oui, le site a une api, mais n'est pas utile pour l'extraction de données de l'api est appelée api REST.
OriginalL'auteur lonesomeday