我有一個連接到API和崗位信息到他們的系統PHP腳本,但是當它試圖連接它拋出一個致命的錯誤:PHP致命錯誤:未捕獲的異常「異常」有消息
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
如果我把它發送到一個PHP腳本,它只是抓住IP然後它可以工作,但是如果我把它發送到API,它不會。我的PHP腳本創建XML然後轉發到服務器。我得到錯誤,所以我剛剛創建以下小腳本純粹是爲了測試連接:
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;
如果我更改URL,以一個簡單的腳本在我們的服務器上的另外一個剛剛抓住傳入連接的IP和返回它:
$ip=$_SERVER['REMOTE_ADDR'];
echo 'IP equals = ' . $ip;
然後它工作正常,沒有錯誤。
更新 -
與它的錯誤將引發以下警告,可能是因爲劇本沒有發出正確的信息給API
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.
另外請注意,我可以使用訪問API服務器罰款小提琴手發送手動創建的項目,它只是當這個腳本試圖連接和發送數據有一個問題。我寫了另一個快速腳本連接並打印出默認的響應(提交項目的RSS供稿)
當我運行「主」連接器腳本,它拋出以下兩種錯誤
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
我會建議它是與您正在使用,第一次測試如果鍵存在的數組,然後使用它。 – 2009-07-22 13:11:25
smoove666是的,它工作正常,但它是一個封閉的服務器,所以你可以刪除對它的引用? 我可以通過瀏覽器訪問它,我也可以通過腳本訪問它並解析它提供的響應。 – 2009-07-22 13:30:02