Seguindo o exemplo para deixar mais claro, não tem como eu simplesmente fazer uma requisição para https://outrodominio.com.br/ senão teria restrição pelo CORS. Por isso faço pelo PHP e a página e exibida no meu domínio como no exemplo examplo.com.br/proxy.php?url=https://outrodominio.com.br, assim posso fazer a requisição para na minha origem examplo.com.br.
Os links apresentados são apenas ilustrativos.
Moço, eu entendi perfeitamente sua situação, por isso eu disse "adicine isso antes daquele seu if
".
Aquele código que vc mostrou onde tem o trecho if (isset($_GET['url']))
não está no seu arquivo proxy.php
? Pois então, é a esse if
que eu me referia e é antes dele que vc tem que adicionar o que eu sugeri.
Sim, ao adicionar o código acima não muda nada, recebo apenas os erros:


O código que gerou estes erros está no seu GitHub? Eu poderia vê-lo?
Testei no chrome, edge e firefox. Claro o código etá todo aqui:
```php
array(
'header' => "User-Agent: PHP\r\n",
'method' => $_SERVER['REQUEST_METHOD'],
'follow_location' => false // Evita redirecionamentos no proxy
)
);
// Cria o contexto para a requisição
$context = stream_context_create($options);
// Realiza a requisição para a URL de destino usando file_get_contents
$result = file_get_contents($url, false, $context);
// Pega os headers da resposta para enviar ao cliente
$headers = $http_response_header;
//Envia os headers para o cliente
foreach ($headers as $header) {
header($header);
}
echo $result;
} else {
// Caso a URL de destino não tenha sido fornecida, retorna um erro
header("HTTP/1.0 400 Bad Request");
echo "URL de destino não especificada.";
}
```
Testei seu código e não aparece aquele erro.
Será que estamos falando da mesma coisa?
Preparei um repositório no GitHub. Segue as instruções do README e me diz se tiver algum problema, tá bom?
https://github.com/wldomiciano/cors-proxy-com-php
Testei, me retorna isso no console (No localhost:8001):
localhost/:1 Access to fetch at 'http://localhost:8003/destino.php' from origin 'http://localhost:8001' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
(índice):12
Uncaught (in promise) TypeError: Failed to fetch
at doRequest ((índice):12:9)
at (índice):21:7
doRequest @ (índice):12
(anônimo) @ (índice):21
Promise.then (assíncrono)
doRequest @ (índice):18
(anônimo) @ (índice):21
(índice):18
Warning: file_get_contents(http://localhost:8003/destino.php): Failed to open stream: Cannot assign requested address in /var/www/html/proxy.php on line 28
Warning: Undefined variable $http_response_header in /var/www/html/proxy.php on line 29
Warning: foreach() argument must be of type array|object, null given in /var/www/html/proxy.php on line 31
Está usando qual navegador?
Coloquei online em https://inteligenciaplena.com.br/teste/proxy.php e não me retornou mais esse erro, talvez seja a verão do php local! Mas como pode ver no console ainda tenho erros relacionados a Compartilhamento de Recursos de Origem Cruzada: https://inteligenciaplena.com.br/teste/proxy.php?url=https://joveminventor.com.br/
São referentes a recursos do site, como css e js... Como poderia resolvê-los? Talvez mudar o url para mandar para o proxy, isso seria viável?
Agora eu entendi aquele erro HTTP_ORIGIN ser indefinido. Realmente não estávamos falando da mesma coisa.
Veja bem, se vc está acessando do seu navegador o endereço `https://inteligenciaplena.com.br/teste/proxy.php?url=https://joveminventor.com.br/` vc não está sujeito ao CORS e usar seu proxy é desnecessário.
Na verdade vc está criando um problema de CORS que antes não existia como vc mesmo notou naqueles erros relacionados com CSS, JS e etc...
Pensa comigo: Por que eu iria acessar `https://inteligenciaplena.com.br/teste/proxy.php?url=https://joveminventor.com.br/` se eu posso acessar `https://joveminventor.com.br/` diretamente?
O CORS ocorre quando eu tento acessar `https://joveminventor.com.br/` a partir de um endereço não autorizado usando o `fetch`, como eu fiz naquele exemplo do repositório. É nesta situação que seu proxy faz sentido.
Então eu imaginei que vc queria usar o `fetch` para fazer uma requisição para alguma API que retornaria um JSON.
Claro que vc pode usar o `fetch` para requisitar um arquivo HTML, mas aí vc vai ter que impelementar uma lógica para substituir a URL de todos os CSS, JS e qualquer outro arquivo que o HTML desejado esteja referenciando.
Veja novamente o meu repositório. Eu o atualizei com a lógica que lida com arquivos CSS. Mas é só um exemplo, pois está incompleto. Veja com atenção o README também porque eu modifiquei alguns comandos.
Entendi, bom exemplo! Muito obrigado pela direção.
Maravilha, então! Eu pretendo excluir aquele repositório de exemplo, vc ainda vai precisar dele?
Já salvei o código e estou avançando, pode apagar caso queira. Agradeço mais uma vez
Ah, uma dúvida: A requisição que gerou este erro foi feita a partir de um navegador? Porque é muito estranho que o HTTP_ORIGIN não esteja presente, pois o navegador sempre envia este cabeçalho sem a gente precisar fazer nada.