1

私はここで書くのは初めてですが、過去数年間にたくさんの回答を読んだので、まず第一に、これまで私に与えてくれた多くの助けに感謝します! だから、これは今日私を夢中にさせるものであり、どこにも答えを見つけることができませんでした:

Openfire をリモートで管理する Web サービス (Openfire プラグイン) と LAMP ベースのバックオフィス (別のボックス) があります。Openfire を新しい (3 つ目の) ボックスに移行した後、バックオフィス コードが機能しなくなりました。ここにスニペットがあります:

<?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);
?>

Curl の詳細な出力は次のとおりです。

* 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

奇妙なことに、コマンドラインから試してみると、完全に機能します。

user@login01:~/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 とコマンドライン curl の違いは何でしょうか? 接続自体をテストするためだけに、派手な余分なものをすべて削除しましたが、いくつかの違いが残っている必要があります.

さらにいくつかのテストを行いました。結果は次のとおりです。

  • 他の Web サイト (例: google.com) への PHP カール: 動作
  • 自分のマシンのChromeにリンクを挿入しました:動作します
  • php system() 経由でテストされたコマンド ライン カール: 動作しません
  • また、違いを tcpdump したかったのですが、ルート権限を持っている別のボックスでは、PHP とコマンド ライン バージョンの両方が機能します。

これらの2つのボックスはお互いが好きではないようです:-)

よろしくお願いします。

4

1 に答える 1

0

PHP では、次のように (URL ではなく) ポートを個別に指定する必要があります。

$url = "http://gbbackup.dyndns.org/plugins/goldsteinAdmin/goldsteinadmin";
...
curl_setopt($ch, CURLOPT_PORT, 9090);
...
于 2012-06-26T14:12:10.213 に答える