ASP.NET эквивалент этого кода PHP? - PullRequest
3 голосов
/ 22 февраля 2010

У нас есть разработчик флеш-памяти, который использует файл с именем proxy.php с запросом string? Url = "http://feedburner/whatever" для доступа к внешним данным из RSS-каналов из доменов, которые по умолчанию недоступны из кода SWF. Например, я мог бы иметь в браузере: http://localhost/proxy.php?url=feedburner.com/a_feed и браузер отобразит страницу, как если бы я поместил URL-адрес feedburner непосредственно в адресную строку браузера. Код PHP в этом файле proxy.php находится ниже.

$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;
}

Работает нормально, но из-за ограничений хостинга нам нужно скопировать функционал в asp.net. Я не знаю PHP и, несмотря на все попытки понять код, у меня ничего не получается. Мне нужно иметь возможность дублировать функционал, который я описал в первом абзаце, с asp.net, но, несмотря на поиск в Google и пробу техники с XmlTextWriter внутри файла Ashx, у меня не получилось. Что мне здесь не хватает?

Я предполагаю, что response.redirect не будет работать, так как он говорит источнику перейти на сам внешний домен, и мы хотим избежать этого.

Как мне добиться этой функциональности PHP-кода в ASP.NET?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

Все, что он делает, это вызывает CURL, который является HTTP-клиентом (помимо прочего), чтобы загрузить файл и затем передать его по ответу. Вы можете повторить функциональность, вызвав HTTPWebRequest. Здесь есть учебник:

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

1 голос
/ 22 февраля 2010

На случай, если кому-то понадобится фрагмент кода. Основываясь на этой ссылке, я написал приведенный ниже код, и он выполняет только трюк (очевидно, он прямо сейчас закодирован, но эй ...):

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); 
}
...