PHP はリモート ファイルを取得します

WBOY
リリース: 2016-06-13 13:24:03
オリジナル
926 人が閲覧しました

PHP リモート ファイルを取得します
if(!($contents=file_get_contents('http://finance.yahoo.com/d/quotes.csv?s=AMZN&e=.csv&f=slldltlcohgv'))){
die ('fail to open yahoo');
};
echo $contents;


成功するまでに平均 3 ~ 4 回の更新が必要で、警告が表示されるのはなぜですか他のケースでは HTTP リクエストが失敗しました!


-----解決策---------

C/C++ コード
バート・フリーデリヒス 2012年4月16日 12:17
file_get_contents は POST を実行でき、最初にそのためのコンテキストを作成します。

$opts = array('http' =>
  配列(
    'メソッド' => 'POST',
    'header' => "コンテンツタイプ: text/xmlrn"。
      "認可: 基本 ".base64_encode("$https_user:$https_password")."rn",
    'コンテンツ' => $body,
    'タイムアウト' => 60
  )
);
                        
$context = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
ペペレグリナ 2011年12月21日 11:30
get_file_contents(url) を試行する際にこの問題が発生する場合:

警告: file_get_contents(url): ストリームを開けませんでした: yy 行目の xx で HTTP リクエストが失敗しました。

SonicWall ファイアウォールの内側にいる場合は、これをお読みください。
https://bugs.php.net/bug.php?id=40197
(この短い行: ファイアウォールの内部設定で、「CFS に対してホスト タグ検索を強制する」というラベルの付いたボックスのチェックを外します)

どうやらデフォルトでは、SonicWall は「Host:」ヘッダーのない HTTP リクエストをブロックします。これは、PHP get_file_contents(url) 実装の場合に当てはまります。

これが、cURL wget を使用して同じマシンから同じ URL を取得しようとすると、機能する理由です。

これが誰かの役に立つことを願っています、私はそれを見つけるのに何時間もかかりました:)
godwraith01 ヤフードットコム 11-Oct-2011 04:16
一部のサーバー宛先でストレート IP の代わりにホスト名を使用すると問題が発生しました。

file_get_contents("www.jbossServer.example/app1",...) を使用すると
呼び出しているサーバーから「無効なホスト名」を取得します。

これは、おそらく file_get_contents が IP を取得した後にリクエストを書き換えて、次と同じものを取得するためです。
file_get_contents("xxx.yyy.www.zzz/app1",...)

また、リクエストで IP アドレス指定を行うと、多くのサーバーがアクセスを拒否することもご存知でしょう。

cURL では、この問題は存在せず、設定したとおりにホスト名が解決されるため、サーバーは <div class="clear"> に対して失礼な応答をしません。</div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート