2010-09-01 116 views
0

我有一个PHP脚本,它使用'echo'命令和数据库中的数据生成XML。 因此,如果我从浏览器访问此脚本,我可以看到xml数据并下载它。如何使用WebClient下载PHP脚本生成的XML内容?

所以我写一个软件来检索这个数据使用webclient类。但webclient只下载一个空文件,所以我想它试图下载.php文件,而不是生成的动态内容。

PHP脚本发送header("Content-type: text/xml"),Web客户端尝试从https://mySecureServer.com/db/getXMLData.php下载(也许这是问题)。

任何想法?

编辑:Web客户端代码(只是撕开了一些本地的文件操作):

string url = @"https://mySecureServer.com/db/getXMLData.php"; 
WebClient client = new WebClient(); 
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadFileCompletedEvtHdl); 
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChangedEvtHdl); 
client.BaseAddress = @"https://mySecureServer.com/db/"; 
client.DownloadFileAsync(new Uri(url), toSavePath + filename); 
+0

Webclient无法下载.php文件,因为这是永远不可用的。 – 2010-09-01 17:07:29

+0

请显示您正在使用的代码下载。 – 2010-09-01 17:08:07

回答

0

如果你只是想下载此getXMLData.php脚本生成的XML数据,那么你可以直接使用cURL得到它的内容:

function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     CURLOPT_SSL_VERIFYPEER => false  // disable certificate checking 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

//Now get the webpage 
$data = get_web_page("https://mySecureServer.com/db/getXMLData.php"); 

//Display the data (optional) 
echo "<pre>" . $data['content'] . "</pre>"; 
+0

尝试了你的代码,但得到了这样的结果:**“指定的CGI应用程序由于没有返回一组完整的HTTP头而导致错误,它返回的头是:”**,这似乎是IIS + PHP http://bugs.php.net/bug.php?id=25863)。你有任何其他的想法或者解决这个问题吗? – Metraton 2010-09-03 10:46:02