2010-02-22 2 views
3

У нас есть Flash-разработчик, который использует вызовы файл proxy.php с помощью querystring? Url = "http: // feedburner/whatever" для доступа к внешним данным из rss-каналов из доменов, которые по умолчанию недоступны из swf-кода. например, у меня может быть следующее в браузере: http://localhost/proxy.php?url=feedburner.com/a_feed, и браузер отобразит страницу так, как если бы я поместил URL-адрес feedburner непосредственно в адресную строку браузера. Код PHP в этом файле proxy.php приведен ниже.ASP.NET эквивалент этого 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?

+0

Посмотрите здесь: http://www.php.net/manual/en/ref.curl.php –

+0

универсальный один для любого языка будет вызова командной строки CURL. – takeshin

ответ

2

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

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

+0

Удивительные стимулы ссылки, спасибо. Какое хорошее тестовое приложение! Я собираюсь опубликовать код, эквивалентный приведенному ниже php. –

1

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

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); 
} 
Смежные вопросы