2012-05-31 38 views
0

我正在編寫一個Android應用程序,它與我們公司的iPad應用程序完全相同。但我有一個問題,而在Android上開發。該應用程序從網絡服務器下載文件。它將調用像一個網址:HTTP文件下載500內部服務器錯誤

https://www.somedomain.com/API/Download.aspx?param1=test&param2=test2等等

在iPad上,這是可以正常使用(我用的是ASIHTTPRequest類此)。但在Android上它只給我一些問題。

只要我想用android下載文件,就會下載一個帶有500內部服務器錯誤HTML文檔而不是PDF文件的文件。

我檢查了網址,它們看起來和iPad上的完全一樣。

我能想象的唯一事情就是用戶下載的文件是「即時」創建的。所以需要一些時間(10或20秒)來生成文件,然後文件被下載。

在Android上我這樣做:

我有延伸的一類:

extends AsyncTask<String, Integer, JSONObject> 

的方法,我這樣做:

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet(url); 
HttpResponse response = httpclient.execute(httpget); 

InputStream data = response.getEntity().getContent();  
File file = new File(context.getDir("docs", Context.MODE_PRIVATE), FileName); 

OutputStream output = new FileOutputStream(file); 
ByteStreams.copy(data, output); 
Closeables.closeQuietly(output); 

但是,這是給我一個500內部服務器錯誤文檔而不是所需的PDF文件。我在這裏錯過了什麼? (對不起,我剛剛開始爲Android開發,所以我不是這方面的專家;-))

在此先感謝!

+0

對我很愚蠢,把它改成HTTPGet,但沒有區別... – CyberK

+0

你需要發送什麼類型的頭文件?例如Accept頭就會有所作爲。服務器是否返回302重定向到文件?我懷疑這是HttpGet與ASIHTTPRequest的默認請求參數的區別。另外,你的代碼是否適用於其他URI? –

+0

我不需要發送特定的標題。在iPad上,我只是簡單地調用這個URL,沒有什麼更少的......我嘗試了一個簡單的JPG圖像的代碼,這個代碼可以工作,但是再次,那麼這個文件就會在URL被調用時出現,並且我調用的API會生成在飛行的文件... – CyberK

回答

0

確定它現在正常工作...愚蠢的事情...我不斷創建一個新的HttpClient,因此會話不存儲在連接中。這就是爲什麼服務器返回500內部服務器錯誤,因爲用戶不知道的服務器...

謝謝大家的幫助,雖然!

1

事實上,您的服務器的響應狀態代碼是問題,這意味着這應該與Android的東西沒有關係,只與您發送的請求有關。我注意到,雖然這可能是由於故意的遺漏,但您正在執行POST請求而不添加任何POST參數。如果這是一個GET?我注意到,端點是查詢字符串中帶有GET參數的ASPX路徑。也許你的服務器設置爲只響應GET而不是POST。這是如何在iOS代碼中完成的? GET和POST之間沒有區別,還是通過您使用的庫從您抽象出來?

+0

更改爲HTTPGet,相同的問題......嗯,iPad完美工作,具有相同的URL,所以它與來自Android的請求有關,服務器運行良好..但是它可能是什麼?我不熟悉android HTTP的東西,所以也許我錯過了一些東西... – CyberK

+0

如果你的目標是Android 2.2+,你可以先使用AndroidHttpClient client = AndroidHttpClient.newInstance([user agent string]);而不是實例化一個DefaultHttpClient。該類僅爲HttpClient實現封裝了一些優化的默認設置。不知道這是否會立即解決您的問題,但這是一個開始。在兩個平臺上發送之前,我還會檢查確切的URL。也許你錯過了參數上的一些URL編碼?請記住,500狀態意味着錯誤發生在服務器上......所以它一定是請求。 – Rich

+0

好吧我試過AndroidHttpClient,結果相同。我檢查了這兩個設備上的URL,確切的相同和相同的編碼,所以不能成爲問題...我認爲問題是服務器需要一些時間來生成文件,然後它纔會響應,android中的HTTP客戶端不會等待那個...... – CyberK