2012-05-22 69 views
1

我是新來這裏寫的,但在過去幾年閱讀了很多答案,首先感謝:迄今爲止給予我的很多幫助!所以,這是什麼讓我瘋狂的今天,並無法找到答案的任何地方:php curl在命令行版本正在工作時被拒絕

我有一個Web服務(Openfire插件)和基於LAMP的後臺(在一個單獨的盒子),管理Openfire遠程。將Openfire遷移到新的(第三個)框後,後臺代碼停止工作。這裏是一個片段:

<?php 
    header("Content-Type: text/plain"); 

    $url = "http://gbbackup.dyndns.org:9090/plugins/goldsteinAdmin/goldsteinadmin"; echo $url."\n"; 

    $ch = curl_init($url); echo "handle: ".$ch."\n"; 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_STDERR, fopen('php://stdout', 'w')); 
    $result = curl_exec($ch); echo "Result: ".$result."\n"; 
    if ($result === false) echo 'cURL error '.curl_errno($ch).': '.curl_error($ch)."\n"; 
    print_r(curl_getinfo($ch)); 
    curl_close($ch); 
?> 

捲曲的詳細輸出是:

* About to connect() to gbbackup.dyndns.org port 9090 (#0) 
* Trying 81.183.210.206... * Connection refused 
* couldn't connect to host 
* Closing connection #0 

現在奇怪的是,如果我通過命令行嘗試,它完美的作品:

[email protected]:~/public_html/gb$ curl -v "http://gbbackup.dyndns.org:9090/plugins/goldsteinAdmin/goldsteinadmin" 
* About to connect() to gbbackup.dyndns.org port 9090 (#0) 
* Trying 81.183.210.206... connected 
* Connected to gbbackup.dyndns.org (81.183.210.206) port 9090 (#0) 
> GET /plugins/goldsteinAdmin/goldsteinadmin HTTP/1.1 
> User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 
> Host: gbbackup.dyndns.org:9090 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Expires: Thu, 01 Jan 1970 00:00:00 GMT 
< Set-Cookie: JSESSIONID=12e1urcewodgr;Path=/ 
< Content-Type: application/json;charset=ISO-8859-1 
< Transfer-Encoding: chunked 
< 
{"type":"error","msg":"RequestNotAuthorised"} 
* Connection #0 to host gbbackup.dyndns.org left intact 
* Closing connection #0 

可能是什麼PHP和命令行卷曲之間的區別?爲了測試連接本身,我已經刪除了所有花哨的附加組件,但是必須保留一些差異。

我做了一些測試,這裏的結果:

  • PHP捲曲的其他網站(如google.com):工作
  • 插入我自己的機器上的鏈接到瀏覽器:適用
  • 通過PHP系統()測試命令行卷曲:不工作
  • 我也想和tcpdump的差異,但另一方面中,在那裏我有root權限,PHP和命令行版本的作品

似乎只是這兩個盒子不喜歡彼此:-)

在此先感謝您的幫助!

回答

0

使用PHP,你必須單獨提供端口(未在URL),如:

$url = "http://gbbackup.dyndns.org/plugins/goldsteinAdmin/goldsteinadmin"; 
... 
curl_setopt($ch, CURLOPT_PORT, 9090); 
...