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?

Foi útil?

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:

http://support.microsoft.com/kb/303436

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); 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top