ich einen PHP-Skript, das auf eine api und Beiträgen Informationen, um ihre Systeme verbindet, aber wenn sein Versuch, es zu verbinden wirft einen fatalen Fehler:PHP fatale Fehler: abgefangene Ausnahme ‚Exception‘ with message
Fatal error: Uncaught exception 'Exception' with message 'Problem with
'http://apitestserver.co.uk:9000/Service.svc/Items' in
/var/www/html/e/connect_test.php:17 Stack trace: #0
/var/www/html/e/connect_test.php(39):
do_http_request('http://apitest....', 'hello') #1 {main} thrown in
/var/www/html/e/connect_test.php on line 17
Wenn ich es an ein PHP-Skript sende, das nur die IP-Adresse ergreift, funktioniert es, aber wenn ich es an die API sende, tut es das nicht. Mein PHP-Skript erstellt XML und leitet es dann an den Server weiter. Ich war immer Fehler so dass ich nur die folgenden kleineren Skript erstellt lediglich die Verbindung testen:
function do_http_request($url, $data, $method = 'POST',
$optional_headers = 'Content-Type: application/atom+xml') {
$params = array(
'http' => array(
'method' => $method,
'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");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url");
}
$metaData = stream_get_meta_data($fp);
fclose($fp);
if(!preg_match('~^HTTP.*([0-9]{3})~',
$metaData['wrapper_data'][0], $matches)){
throw new Exception('MALFORED RESPONSE - COULD NOT UNDERSTAND HTTP CODE');
}
if (substr($matches[1], 0, 1) != '2') {
throw new Exception('SERVER REPORTED HTTP ERROR ' . $matches[1]);
}
return $response;
}
$data = 'hello';
$paul =
do_http_request('http://apitestserver.co.uk:9000/Service.svc/Items',$data);
echo $paul;
Wenn ich die URL auf ein einfaches Skript auf einem anderen einen unserer Server ändern, die nur die IP der eingehenden Verbindung packt und gibt es zurück:
$ip=$_SERVER['REMOTE_ADDR'];
echo 'IP equals = ' . $ip;
Dann funktioniert es gut, ohne Fehler.
Update -
mit Fehlern auf sie wirft die folgende Warnung, wahrscheinlich, weil das Skript ist nicht die richtigen Informationen an die API Senden
Warning: fopen(http://apitestserver.co.uk:9000/Service.svc/Items)
[function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1
500 Data at the root level is invalid. Line 1, position 1.
Beachten Sie auch, dass ich die api Server fein zugreifen können Fiddler, um manuell erstellte Elemente zu verschicken, nur wenn dieses Skript versucht, eine Verbindung herzustellen und Daten zu senden, gibt es ein Problem. Ich schrieb ein weiteres schnelles Skript verbindet die und druckt die Standardantwort (einen RSS-Feed des eingereichten Artikels)
Als ich den ‚Haupt‘ Anschluss Skript ausführen wirft es die folgenden zwei Fehler
Warning: fopen() [function.fopen]: php_network_getaddresses:
getaddrinfo failed: Name or service not known in
/var/www/html/e/sequence.php on line 65
Warning: fopen(http://apitestserver.co.uk:9000/Service.svc/Items)
[function.fopen]: failed to open stream: Operation now in progress
in /var/www/html/e/sequence.php on line 65
, dass es etwas mit der Arrays zu tun hat, die Sie verwenden, ersten Test, ob das Schlüssel vorhanden ist, verwenden Sie es dann. –
smoove666 ja es funktioniert gut, aber es ist ein geschlossener Server, also können Sie den Verweis löschen? Ich kann mit einem Browser gut darauf zugreifen, ich kann auch mit einem Skript darauf zugreifen und die Antwort parsen. –