2017-07-20 2 views
0

Es gab viele Fragen wie diese gefragt, aber diese Vorschläge haben nicht geholfen. Ich benutze PHP cURL, um auf die n-fähige Datenbank für unser Unternehmen zuzugreifen. Die n-fähige Webschnittstelle ist kein n-zentraler Server, sondern ein von n-fähiger Server bereitgestellter Server.So laden Sie eine vollständige Webseite mit PHP

Ich arbeite an einem Projekt, bei dem wir unsere Webservices wie Ubiquiti und N-inable in ein benutzerdefiniertes Dashboard integrieren, anstatt auf sieben verschiedenen Websites zu surfen. Unifi hat eine eigene API, die gut funktioniert. N-able hat einige Versuche mit API-Implementierungen, die ich überprüft, ausprobiert und gescheitert habe.

Hier sind die Projekte:

github.com/N-able/API

https://github.com/Daandamhuis/N-Able-Dashboard

Beim Versuch, die ncod51.n-able.com Seite mit PHP und cURL, für den Zugriff auf nur der Boden der Seite geladen wird:

Test of website access

<?php 

$url="https://ncod51.n-able.com"; 

//traverse array and prepare data for posting (key1=value1) 
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 
//create the final string to be posted using implode() 
$post_string = implode ('&', $post_items); 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url.'/IndexAction.action'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 
5.1; 
en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_REFERER, $url.'loginLoginAction.action'); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
    if (!$result) { 
     $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     curl_close($ch); // make sure we closeany current curl sessions 
     die($http_code.' Unable to connect to server. Please come back later.'); 
} 
echo $result; 
?> 

Die aktuelle Anwendung wird nicht geladen. Jetzt ist es das Ziel, die Informationen von der n-fähigen Seite zu holen und sie auf eine php-erstellte Schnittstelle zu laden, die wir mit einem aktuellen Wamp-Server implementieren.

Lassen Sie mich wissen, ob zusätzliche Informationen benötigt werden. Dies ist die einzige PHP-Datei, die benutzt wird, bis ich Zugang bekomme.

Jede Hilfe wird sehr geschätzt!

HINWEIS: Die n-fähige Site ist eine https-Site.

+0

Hatten Sie irgendwelche Warnung oder Fehler angezeigt, wenn Sie display_errors oder in den PHP-Fehlerprotokollen einschalten?Ist das Curl-Modul in WAMP aktiviert? – Mic1780

+0

Es werden keine Fehler angezeigt und das Curl-Modul ist ebenfalls aktiviert. Ich habe überprüft, dass die Seite auch POST akzeptiert. Ich bin vorangegangen und habe die Integration mit ihrer WSDL in ein integriertes Dashboard mit unseren anderen Diensten begonnen. Ich würde immer noch gerne wissen, warum ich das nicht zur Arbeit bringen kann, da ich es in der Zukunft brauchen könnte. –

+0

Haben Sie 'curl_error' verwendet, um zu sehen, welcher Fehler' curl_exec' für Sie zurückkehrt? Vielleicht können Sie daraus Informationen gewinnen. – Mic1780

Antwort

0

wenn

tun
foreach ($post_data as $key => $value) { 
    $post_items[] = $key . '=' . $value; 
} 

, was passiert, wenn eine Taste oder einen Wert enthält den = Charakter? Lassen Sie uns sagen, Ihr $ Schlüssel ist foo=bar, und Ihr $ Wert ist , Sie werden mit foo=bar=baz=lel&what enden, die eine illegale Urlencoding ist, erwarten Sie nicht, dass der Server es zu verstehen. erwartet in der Tat, dass der Server mit einer Antwort HTTP 400 Bad Request antwortet, da es sich um eine ungültige Anforderung handelt. die richtige Codierung wäre foo%3Dbar=baz%26lel, und Sie haben das gleiche Problem mit Leerzeichen und < und > und & und ÆØÅ und eine Reihe anderer Zeichen. fix das, können Sie entweder tun $post_items[] = urlencode($key) . '=' . urlencode($value); - oder noch besser, codieren Sie die gesamte Zeichenfolge mit http_build_query, deshalb ist es vorhanden. in der Tat, dieser kodieren Code

foreach ($post_data as $key => $value) { 
    $post_items[] = urlencode($key) . '=' . urlencode($value); 
} 
$post_string = implode ('&', $post_items); 

kann mit dieser einzigen Zeile ersetzt werden:

$post_string=http_build_query($post_items); 

das tun. Wenn Sie CURLOPT_VERBOSE debuggen, werden auch viele nützliche Debug-Informationen gedruckt.

aber Sie sagen, dass nur der untere Rand der Seite lädt? posts sowohl die headers (wie von CURLOPT_VERBOSE gedruckt) und Antwort html des Ladens der Seite, sowohl in Curl und in Firefox, dort liegt wahrscheinlich ein Hinweis in denen (wie ein http Fehlercode in den Headern oder vielleicht der Rest der Seite ist geladen von Javascript in der html?)

Verwandte Themen