curl が無効になっているホストで curl を使用する代替手段はありますか?
4 に答える
HTTP 経由でコンテンツを取得するには、まずfile_get_contents
;を試すことができます。ホストが http:// ストリームを無効にしていない可能性があります。
$str = file_get_contents('http://www.google.fr');
これは無効になっている可能性があります ( を参照allow_url_fopen
)。そして時には...
無効になっている場合は、fsockopenを試してみてください。マニュアルに記載されている例には、次のように書かれています(引用):
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
ただし、それが非常に低レベルであることを考えると(ソケットを直接操作していて、HTTP プロトコルはそれほど単純ではありません)、それを使用するライブラリを使用すると、作業が楽になります。
http://www.phpclasses.orgにはこれらの「代替手段」がたくさんあります。これを試すことができます: http://www.phpclasses.org/browse/package/3588.html
このスレッドのすべての回答は有効な回避策を示していますが、留意すべき点が 1 つあります。ホストは、何らかの理由で、Web サーバーから PHP コードを介して HTTP リクエストを行うことは「悪いこと」であると見なしたため、curl 拡張機能を無効にしました (または有効にしませんでした)。回避策を見つけて、別の方法でリクエストをブロックすることに彼らが気付いた場合は、非常に高い可能性があります。この特定のホストを使用せざるを得ない政治的な理由がない限り、http 要求を行う必要がある場合は、アプリやページを別の場所に移動することを真剣に検討してください。
PHP でプレーンな curl サーバー スクリプトを作成し、それを curl 対応のホスティングに配置することができます。curl が必要な場合は、curl のないマシンから必要なときにクライアント呼び出しを行うと、必要なデータが返されます。奇妙な解決策かもしれませんが、一度役に立ちました。