HttpURLConnection取不得參數的原因分析

 

 

項目由3個系統組成:1臺服務器裏裝的weblogic8.1,裏面是AP,1臺服務器是裝的tomcat,裏面有處理程序和文件服務2個系統。只有AP能夠連接數據庫。

項目中要用到下載和上傳。

上傳通過Flex上傳到文件服務器後,由處理的系統進行處理,然後AP去處理的系統裏面抓數據,由AP記錄進數據庫,再返回給用戶。此地方用的HttpURLConnection進行的連接抓取數據,沒有問題。

下載通過AP查詢數據庫,進行參數整合處理,將參數發送到處理系統,由處理系統在文件服務中尋找需要的資料,然後進行打包處理,再將下載路徑返回給AP。此地方用的HttpURLConnection進行連接和發送數據,出現問題。。。

 

情況分析:

在本地做AP連接正式環境,沒有問題,可以下載和傳遞數據。但是正式環境的AP卻沒有辦法。。。

正式的AP和文件服務器不在同一個機房,屬於跨域操作,之間有防火牆阻隔,由於在本地測試沒有問題,說明是正式環境的AP的防火牆設置有問題。但是由於不能修改防火牆配置,只能另尋辦法。

雖然用了2次HttpURLConnection,但是方法不一樣,一次是用POST方法但是將參數直接放在鏈接後的,可以取到。而出現問題的是用POST方法但是是將參數寫入流中的。由於參數較多,而且參數間有層級關係,因此使用原始的參數&參數的方式放在URL後面不實際,而且判斷會有很多問題。而且參數長度有可能會使字符串的長度達到2W。。。

HttpURLConnection的實質其實是創建Socket連接,但是其創建的是隨機端口,而機房設置是隻開放了80等常用端口,其他端口全部封死,因此,寫入流中的參數在文件服務器那無法抓取到。

 

解決辦法:

使用JSON將所需要的參數進行對象封裝,然後連接到URL後面,仍然使用POST方法,就可以傳遞到文件服務器上。處理參數的時候,也改成JSON的處理方式,這樣,邏輯清楚,也方便控制。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章