Dış etki alanından veri alınıyor

5 Cevap php

Ben bir analitik proje oluşturma. Amacım javascript küçük bir miktar sitemden içeren x-etki sahibi vermektir. Bu bana kendi fare hareketlerini takip yeteneği verir. Ben aşağı izleme var, yapmam gereken tek şey benim DB saklanabilir böylece geri benim sunucuya veri göndermek olduğunu. benim sorunum veri getJSON yoluyla göndermek için çok büyük olmasıdır.

Remember.. I can't use $.Post, or any kind of XMLhttp request because my domain and x-domain are REMOTE. And Browser don't permit that.. I can only use getJSON.

Bu işe yaramazsa, ben kurulum için bir proxy söylendi. Peki ben öğrendim ne, bir vekil sadece vekil kurulum vardır sunucusu için çalışır. Değil bana veri göndermek için çalışıyor sunucu için

Ive gördüm çünkü, bu mümkün olduğunu biliyorum. Herkes herhangi bir fikir var? Ben yapmaya çalışıyorum ne iframe'ler iyi midir? Herkes paylaşmak için herhangi bir kaynak var mı?

Çok teşekkürler

5 Cevap

Size JavaScript iframe'e formu yazı var, sonra bir iframe ve form oluşturmak olabilir. Sen gizli yapmak için ekranı onu yerleştirebilirsiniz. Örneğin:

function post_my_data(json){

    var f = document.createElement('form');
    f.action = 'http://www.my-domain.com/receive.php';
    f.method = 'post';
    f.target = 'posttarget';

    var i = document.createElement('input');
    i.type = 'hidden';
    i.name = 'json';
    i.value = json;

    f.appendChild(i);

    var ifr = document.createElement('iframe');
    ifr.name = 'posttarget';
    ifr.style.display = 'absolute';
    ifr.style.left = '-1000px';

    document.body.appendChild(ifr);
    document.body.appendChild(f);

    f.submit();
}

Eğer JSONP gibi bir şey kullanarak düşündünüz mü?

GetJSON işe böylece parçalar verilerinizi ayrıldı. Sen producer veri ile bir sıra dolgu tutar, böylece veri kuyruğa uygulamak, ve consumer alanınızdaki getJSON ile küçük parçalar halinde onu yakalıyor olabilir. Zaman, ama bunu denemek ve performansı ile Tamam görebiliyordu - Bu gerçek olmayacak.

Sen do çapraz etki alanı bölümü görmek http://www.xml.com/pub/a/2006/06/28/flashxmlhttprequest-proxy-to-the-rescue.html flaş flaş var ve konuşmak için javascript kullanabilirsiniz

Ben bir vekil neden kullanamazsınız net değilim. X-etki ve senaryo üzerinde çalışan bir komut dosyası tarayıcı mesaj javascript sonra kıvırmak veya benzer kullanarak etki aynı bilgileri nakleder.

Belki de daha iyi o zaman ben can anlayabiliyorum. Ben değil, farklı başlıkları ve malzeme göndererek büyük için, php ile iyi değilim. Nasıl çalışır proxy dosyasına ajax yazı göndermek olduğunu. proxy dosya bir dış sunucuda bulunan

    	 $.ajax({
	   type: "POST",
	   url: "http://mywebsite.com/ajax-proxy.php",
	   data: 'csurl=www.google.com',
	   error: function(e) {console.log(e);}, 
	   success: function(msg){console.log(msg)}

	});

Ayrıca vekil ileri size url csurl geçmek lazım. Bu örnekte ben google kullanılan. ama ne ben csurl olarak normal kullanım olur ben ajax veri depolamak nerede için dizini

Vekil dosyası olarak, var olan bir

$valid_requests = array()

Bu dizide, size vekil tasvip etmek istediğiniz tüm adresler devlet. (: alışkanlık çalışmak csurl parametre tam olarak aynı olması gelmiştir veya Not) bu örnekte www.google.com koymak

Aşağıda vekil dosya

  <?php
/**
 * AJAX Cross Domain (PHP) Proxy 0.6
 *    by Iacovos Constantinou (http://www.iacons.net)
 * 
 * Released under CC-GNU GPL
 */

/**
 * Enables or disables filtering for cross domain requests.
 * Recommended value: true, for security reasons
 */
define('CSAJAX_FILTERS', true);


/**
 * A set of valid cross domain requests
 */
$valid_requests = array(
    'www.google.com'
);

/*** STOP EDITING HERE UNLESS YOU KNOW WHAT YOU ARE DOING ***/

// identify request headers
$request_headers = array();
foreach ( $_SERVER as $key=>$value ) {
    if( substr($key, 0, 5) == 'HTTP_' ) {
    	$headername = str_replace('_', ' ', substr($key, 5));
    	$headername = str_replace(' ', '-', ucwords(strtolower($headername)));
    	$request_headers[$headername] = $value;
    }
}

// identify request method, url and params
$request_method = $_SERVER['REQUEST_METHOD'];
$request_params = ( $request_method == 'GET' ) ? $_GET : $_POST;
$request_url    = urldecode($request_params['csurl']);
$p_request_url  = parse_url($request_url);
unset($request_params['csurl']);

// ignore requests for proxy :)
if ( preg_match('!'. $_SERVER['SCRIPT_NAME'] .'!', $request_url) || empty($request_url) ) {
    exit;
}

// check against valid requests
if ( CSAJAX_FILTERS ) {
    $parsed 	= $p_request_url;
    $check_url  = isset($parsed['scheme']) ? $parsed['scheme'] .'://' : '';
    $check_url .= isset($parsed['user']) ? $parsed['user'] . ($parsed['pass'] ? ':'. $parsed['pass']:'') .'@' : '';
    $check_url .= isset($parsed['host']) ? $parsed['host'] : '';
    $check_url .= isset($parsed['port']) ? ':'.$parsed['port'] : '';
    $check_url .= isset($parsed['path']) ? $parsed['path'] : '';
    if ( !in_array($check_url, $valid_requests) ) {
    	exit;
    }
}

// append query string for GET requests
if ( $request_method == 'GET' && count($request_params) > 0 && ( !array_key_exists('query', $p_request_url) || empty($p_request_url['query']) ) ) {
    $request_url .= '?'. http_build_query($request_params);
}

// let the request begin
$ch = curl_init($request_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); 		// (re-)send headers
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 				// return response
curl_setopt($ch, CURLOPT_HEADER, true); 						// enabled response headers

// add post data for POST requests
if ( $request_method == 'POST' ) {
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($request_params));
}

// retrieve response (headers and content)
$response = curl_exec($ch);
curl_close($ch);

// split response to header and content
list($response_headers, $response_content) = preg_split('/(\r\n){2}/', $response, 2);

// (re-)send the headers
$response_headers = preg_split('/(\r\n){1}/', $response_headers);
foreach ( $response_headers as $key => $response_header )
    if ( !preg_match('/^(Transfer-Encoding):/', $response_header) ) 
    	header($response_header);

// finally, output the content
print($response_content);
?>

Yine, benim web sitesi içinde http://mywebsite.com/ajax-proxy.php?csurl=www.google.com koyarsanız. gayet iyi çalışıyor. hatta url koydum. gayet iyi çalışıyor. ancak ajax mesajı kullanarak bir outsite sunucudan diyoruz eğer. çalışmaz.