Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
não seria nesse trecho ?
$headers = array("REMOTE_ADDR: " . getenv("REMOTE_ADDR"));
>
não seria nesse trecho ?
$headers = array("REMOTE_ADDR: " . getenv("REMOTE_ADDR"));
Então, seria, mas não tá funcionando, tá imprimindo o IP do servidor em vez do IP do usuario.
Alguem sabe outra forma ? http://forum.imasters.com.br/public/style_emoticons/default/cry.gif
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.
>
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 ?
>
ou capture o REMOTE_ADDR antes de executar o curl.
quando executar o curl adicione ip capturado nos parametros do curl.
>
>
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 :(recapitulando
1. a página php que executa o CURL é acessada pelo visitante ou pelo server ?
É 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.
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
Opa esqueci de mencionar um detalhe, o script tá imprimindo o ip do servidor em vez do ip do usuario.