Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato Paulino

Passar o IP do usuario para o CURL

Recommended Posts

Salve galera, to numa enrrascada das boas, o que acontece é o seguinte, eu montei um script pra acessar uma página de outro site com CURL, o problema é que eu preciso passar o IP real do usuário para esta página, ou seja, preciso definir o IP no cabeçalho que será enviado para o CURL abrir a pagina.

 

segue o codigo...

 

teste.php //pagina que fara a requisição com CURL

 

<?

function curl_login($url, $data, $proxy, $proxystatus) {

	$fp = fopen("cookie.txt", "w");

	fclose($fp);

	$login = curl_init();

	curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");

	curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");

	curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

	curl_setopt($login, CURLOPT_TIMEOUT, 40);

	curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);

	if ($proxystatus == 'on') {

		curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);

		curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);

		curl_setopt($login, CURLOPT_PROXY, $proxy);

	}

	curl_setopt($login, CURLOPT_URL, $url);

	curl_setopt($login, CURLOPT_HEADER, TRUE);

	curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
 
	$headers = array("REMOTE_ADDR: " . getenv("REMOTE_ADDR"));
 
	curl_setopt($login, CURLOPT_HTTPHEADER, $headers);

	curl_setopt($login, CURLOPT_FOLLOWLOCATION, FALSE);

	curl_setopt($login, CURLOPT_POST, TRUE);

	curl_setopt($login, CURLOPT_POSTFIELDS, $data);

	ob_start();	  // prevent any output

	return curl_exec ($login); // execute the curl command
 
	ob_end_clean();  // stop preventing output

	curl_close ($login);

	unset($login);	

}

$pagina = curl_login('http://www.dominio.com/ip.php', '', 0, 'off');

print_r($pagina);

unlink('cookie.txt');

?>

ip.php // pagina que será requisitada e que vai "pegar" o ip do usuário

 

<?

echo $REMOTE_ADDR;

?>

Agradeço desde já a atenção de todos.

---

Opa esqueci de mencionar um detalhe, o script tá imprimindo o ip do servidor em vez do ip do usuario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que retorna $_SERVER['HTTP_X_FORWARDED_FOR'] ?

 

ou capture o REMOTE_ADDR antes de executar o curl.

quando esxecutar o curl adicione ip captura.

 

o curl é executado pelo server e não pelo cleinte, por isso, a resposta do ip será sempre do server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que retorna $_SERVER['HTTP_X_FORWARDED_FOR'] ?

 

ou capture o REMOTE_ADDR antes de executar o curl.

quando esxecutar o curl adicione ip captura.

 

o curl é executado pelo server e não pelo cleinte, por isso, a resposta do ip será sempre do server.

Não retorno nada, fica em branco, eu tb ja tentei passar essa variavel pro cabeçalho e tb num deu certo..

 

$headers = array("X-Forwarded-For: " . $_SERVER['HTTP_X_FORWARDED_FOR']);

Será que não tem jeito ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou capture o REMOTE_ADDR antes de executar o curl.

quando executar o curl adicione ip capturado nos parametros do curl.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou capture o REMOTE_ADDR antes de executar o curl.

quando executar o curl adicione ip capturado nos parametros do curl.

Hinom, você quer dizer assim >>

 

<?

function curl_login($url, $data, $proxy, $proxystatus, $ip) {

	$fp = fopen("cookie.txt", "w");

	fclose($fp);

	$login = curl_init();

	curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");

	curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");

	curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

	curl_setopt($login, CURLOPT_TIMEOUT, 40);

	curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);

	if ($proxystatus == 'on') {

		curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);

		curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);

		curl_setopt($login, CURLOPT_PROXY, $proxy);

	}

	curl_setopt($login, CURLOPT_URL, $url);

	curl_setopt($login, CURLOPT_HEADER, TRUE);

	curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
 
 $headers = array("REMOTE_ADDR: " . $ip);
 
 curl_setopt($login, CURLOPT_HTTPHEADER, $headers);

	curl_setopt($login, CURLOPT_FOLLOWLOCATION, FALSE);

	curl_setopt($login, CURLOPT_POST, TRUE);

	curl_setopt($login, CURLOPT_POSTFIELDS, $data);

	ob_start();	  // prevent any output

	return curl_exec ($login); // execute the curl command
 
	ob_end_clean();  // stop preventing output

	curl_close ($login);

	unset($login);	

}

$ip = getenv("REMOTE_ADDR");

$pagina = curl_login('http://www.ofertaoshop.com/teste/ip.php', '', 0, 'off', $ip);

print_r($pagina);

unlink('cookie.txt');

?>

Se for tb não deu certo :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

recapitulando

 

1. a página php que executa o CURL é acessada pelo visitante ou pelo server ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É acessada pelo visitante, e a pagina que é requisitada pelo CURL pega o IP para controlar as visitas, por isso preciso que seja passado o IP do visitante e não do servidor como ta acontecendo agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grave o ip do usuario numa variável de sessão ou cookie.

quando entrar na página que envia o curl, basta requisitar o ip gravado na variavel de sessão.

 

Não confie somente em REMOTE_ADDR, pois esse dados podem vir vazios

 

Faça verificações de consistência, checanco o X-FOWARDED e proxy

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.