ASP.NET equivalente a esse código PHP?
-
22-09-2019 - |
Pergunta
Temos um desenvolvedor flash que usa chamadas de um arquivo chamado proxy.php com o querystring? Url = http: // feedburner/o que quer "para acessar dados externos de feeds RSS de domínios que não por padrão acessíveis do código SWF. Por exemplo, eu poderia ter o seguinte no navegador: http: //localhost/proxy.php? url = feedburner.com/a_feed E o navegador exibiria a página como se eu colocasse o URL do feedburner diretamente na barra de endereço do navegador. O código PHP neste arquivo proxy.php está abaixo.
$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($post_data);
$ch = curl_init( $_GET['url'] );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ( strlen($post_data)>0 ){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
curl_close($ch);
//$response=split("iso-8859-2",$response);
//$response=join("UTF-8",$response);
print $response;
}
Funciona bem, mas devido às limitações de hospedagem, precisamos replicar a funcionalidade no ASP.NET. Não conheço o PHP e, apesar dos esforços para entender o código que estou falhando miseravelmente. Preciso ser capaz de duplicar a funcionalidade que descrevi no primeiro parágrafo com asp.net, mas apesar do Google e tentar uma técnica com o XMLTextWriter dentro de um arquivo Ashx que falhei. O que estou perdendo aqui?
Suponho que uma resposta. O Rredirect não funcionaria, pois diz à fonte ir ao próprio domínio externo e queremos evitar isso.
Como eu alcançaria essa funcionalidade do código PHP no ASP.NET?
Solução
Tudo o que ele está fazendo é invocar Curl, que é um cliente HTTP (entre outras coisas) para baixar o arquivo, transmitindo -o pela resposta. Você pode replicar a funcionalidade chamando httpwebrequest. Há um tutorial aqui:
Outras dicas
Caso alguém gostasse de um trecho de código, com base nesse link, escrevi o código abaixo e ele faz apenas o truque (obviamente está codificado agora, mas ei ...):
protected void Page_Load(object sender, EventArgs e)
{
string URL = "http://feeds2.feedburner.com/the-foreigner";
HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse();
//Read the raw HTML from the request
StreamReader sr = new StreamReader(HttpWResponse.GetResponseStream(), Encoding.ASCII);
//Convert the stream to a string
string s = sr.ReadToEnd();
sr.Close();
Response.Write(s);
}