übergabe von Anmeldeinformationen in PHP-cURL-Hilfe
Ich versuche mich zu übergeben der Anmeldeinformationen für eine website, so kann ich mit file_get_contents auf Sie zu extrahieren einige Daten, aber es funktioniert nicht, ich erhalte eine leere Seite, also keine Ahnung, was ist hier falsch?
<?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;
?>
Hier ist der neue code ist es immer noch nicht funktioniert, stecken im login screen, wenn ich nicht bekommen, Inhalt....
<?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');
?>
Neuen code: ich weiß $url
ist die URL, für die ich mich anmelden muss, aber was mache ich in $data
? Ich weiß, es ist meine login-info, aber wie mache ich es (z.B., <username> Raum <Passwort>)?
<?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;
}
Was tun, den HTTP-Antwort-Header Aussehen? Welche status haben Sie wieder von dem server?
InformationsquelleAutor Bulvak | 2011-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie wahrscheinlich benötigen, um die Flucht der@
username:Dies ist, weil einige Zeichen (wie@
und:
) haben eine Besondere Bedeutung in URLs. Sie müssen zu entkommen, so dass der server behandelt Sie als Zeichen, als vielmehr als Hinweis auf etwas, was über den HTTP-request.Schrott alles. Deine Bearbeitung zeigt, dass du ein grundlegendes Missverständnis darüber, wie HTTP funktioniert. Sie können nicht verwenden Sie CURL zu übergeben HTTP-login-Anmeldeinformationen zu einer Webseite, die erwartet, dass ein web-Formular ausgefüllt werden und dann erwarten, dass Sie in der Lage sein, sich mit
file_get_contents
(das ist Teil von einem komplett separaten API).In Bezug darauf, wie Sie tatsächlich tun... Erstens, herauszufinden, ob die Website hat eine API. Wenn nicht, finden Sie heraus, ob Sie tatsächlich wollen, dass Sie screen-scraping. Es wäre sehr schlechte form zu Bildschirm-kratzen eine website, die nicht zulässt, dass es. Es kann nun in der Tat einen Verstoß gegen Urheberrecht.
Zweite Programm der API. Dies bedeutet, dass die Protokollierung in der Weise, dass die Website erzwungen werden. Dies wird mit der form-Werte (die Sie benötigen, zu senden, in
CURLOPT_POSTFIELDS
wahrscheinlich) und cookies (die Sie benötigen, um in jeder Anforderung, wohl mitCURLOPT_COOKIEFILE
).Arbeit zu verstehen, wie die client-server-Beziehung arbeiten, studieren Sie die API und nicht einfach chuck-code an dem problem und erwarten, dass es funktioniert.
Sie brauchen, um zu die Flucht den Wert, so dass der server erkennt, dass die
@
Charakter ist Teil des Benutzernamens. Wenn du nicht codieren, wird der server denke, dass der Benutzernameokh
und der server istring.gil.com:[email protected]
.Wie ist es jetzt? Ich bearbeitete es, wie Sie sagte, (oder atleast ich denke, ich habe, wenn ich mich nicht Irre bitte korrigieren Sie mich) und ich bekomme immer noch dieselben login-Bildschirm
Haben Sie einen Blick auf meine aktualisierte Antwort.
Itsn ot Urheberrechts, die Website gehört zu der Firma, die ich bin, aber es ist extern gehostet werden und erfordert eine Anmeldung, beglaubigt durch die Firma, die ich habe alles, was ich brauchen, ist zum Lesen von Daten aus einem Kalender, wie ein name....Ich bin stecken geblieben auf diese von 4 Wochen, ich will einfach nur, um es über und über mit..danke ja die Seite hat eine api, aber nicht nützlich für die Daten-Extraktion-api als REST-api.
InformationsquelleAutor lonesomeday