3

さて、私が探しているものは、非常にダミーで、今はまったく気にしない何らかの理由で機能していない以下のコードのように少し似ています(コードの下の質問を読んでください!!):

$url = urldecode($_GET["link"]);
$port = (preg_match("/^https\:\/\//", $url) > 0 ? 443 : 80);

$headers  = "GET / HTTP/1.1\r\n";
$headers .= "Host: $url";
$headers .= "Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.3\r\n";
$headers .= "Accept-Encoding: gzip,deflate,sdch\r\n";
$headers .= "Accept-Language: hu-HU,hu;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
$headers .= "Cache-Control: no-cache\r\n";
$headers .= "Connection: keep-alive\r\n";
$headers .= "User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5\r\n\r\n";
//yea, I'm using Google Chrome's userAgent

$socket = @fsockopen($url, $port) or die("Could not connect to $url");

if ($socket) {

    fwrite($socket, $headers);

    while (!feof($socket)) {
        echo fgets($socket, 128);
    }

    fclose($socket);
}

ご覧のとおり、私が達成しようとしているのは、GETグローバルで指定されたURLからhtmlまたはその他の出力を何らかの方法でフェッチすることです。繰り返しますが、コードは機能しておらず、気にしません。コードを修正する必要はありません。情報やガイダンスが必要です。

今。私はPHPの第一人者ではないので、質問はやや複雑です。

  • 上記のニーズを達成するには、どのようなオプションが必要ですか?
  • その特定の方法を実行する前/後に何を処理する必要がありますか?
  • 依存関係(ライブラリ)はありますか?
  • 長所/コントラスト/以前の経験?

また、たくさんのリンクで答えてくれればとてもありがたいです。「これは最も神聖で唯一の方法です!」のようなドロイドの答えを正確に探しているわけではありません。情報とオプションの収集について詳しく説明しています。知識。=)

これが重要かどうかはわかりません(MongoDBのドライバーのように):現在Windows 7 x64でWAMPサーバーを使用しており、後でCentOS 6.2 Webサーバーの下に移動する予定なので、これらも考慮してください( Linuxへの依存)。

4

2 に答える 2

3

useragentを変更してページのコンテンツを取得する場合は、いくつかのオプションがあります。

最初で最高のIMOはcurlです。ホストの99.9%でこれが有効になっています。独自のvpsが有効な場合は、セットアップが簡単ですhttp://bit.ly/KUn3AS

<?php 
function curl_get($url){
    if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
?>

次に、カスタムストリームコンテキストを使用したfile_get_contentsを使用します。

<?php
function fgc_get($url) {
    $opts = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>"Accept-language: en\r\n" .
                  "Cookie: foo=bar\r\n" .
                  "User-Agent: MozillaXYZ/1.0\r\n"
      )
    );
    $context = stream_context_create($opts);
    $urlContents = file_get_contents($url, false, $context);
    return file_get_contents($url, false, $context);
}
?>

ユーザーから任意のURLを受け入れる場合に$_GETを入力し、場合によっては悪用される可能性がある場合は、どちらの方法を選択しても、サイトのAJAXリクエストのプロキシを作成しようとしている場合は、特定の許可のみを許可するなどのセキュリティを追加できます。ドメイン、または外部スクラップを実行する前にxmlhttprequest / AJAXリクエストが有効かどうかを確認する場合は、選択したままにしておくことができます。

<?php 
if(!empty($_GET['url']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

    $allowed = array('somesite.com','someothersite.com');

    $url = parse_url($_GET['url']);

    if(in_array($url['host'],$allowed)){
        echo curl_get($_GET['url']);
    }
    die;
}
?>
于 2012-05-29T22:40:00.300 に答える
0

URLからコンテンツを取得する簡単な方法

1)最初の方法

ホスティング(php.iniまたはどこか)でAllow_url_includeを有効にします

<?php
$variablee = readfile("http://example.com/");
echo $variablee;
?> 

また

2)2番目の方法

php_curl、php_imap、php_opensslを有効にする

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$variablee = get_data('http://example.com');
echo $variablee;
?>
于 2013-04-03T12:40:33.703 に答える