Schwerwiegender PHP-Fehler: Nicht erfasste Ausnahme 'Ausnahme' mit Meldung
Ich habe ein PHP-Skript, das eine Verbindung zu einer API herstellt und Informationen an ihre Systeme sendet, aber beim Versuch, eine Verbindung herzustellen, tritt ein schwerwiegender Fehler auf:
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 erfasst, funktioniert es, aber wenn ich es an die API sende, funktioniert es nicht. Mein PHP-Skript erstellt XML und leitet es dann an den Server weiter. Ich habe Fehler bekommen, also habe ich nur das folgende kleinere Skript erstellt, um die Verbindung zu 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 in ein einfaches Skript auf einem anderen unserer Server ändere, das nur die IP der eingehenden Verbindung erfasst und diese zurückgibt:
$ip=$_SERVER['REMOTE_ADDR'];
echo 'IP equals = ' . $ip;
Dann funktioniert es einwandfrei ohne Fehler.
Update -
Bei Fehlern wird die folgende Warnung ausgegeben, wahrscheinlich, weil das Skript nicht die richtigen Informationen an die API sendet
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 mit fiddler auf den API-Server zugreifen kann, um manuell erstellte Elemente zu senden. Es ist ein Problem, wenn dieses Skript versucht, eine Verbindung herzustellen und Daten zu senden. Ich habe ein weiteres schnelles Skript geschrieben, mit dem die Standardantwort (ein RSS-Feed übermittelter Elemente) verbunden und ausgedruckt wird.
Wenn ich das 'main'-Connector-Skript ausführe, werden die folgenden zwei Fehler ausgegeben
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