用Jsoup的post方式提交資料產生亂碼

2021-08-21 02:34:29 字數 1578 閱讀 4274

因要自動提交一些資料到伺服器,因此使用jsoup進行操作,軟體環境myeclipse 2014,jdk1.6,jsoup1.6.1。

public void sendreportdatas (string cookie, string area, string orderid)  catch (unsupportedencodingexception e) 

connection con = jsoup.connect("提交資料的**");

con.postdatacharset("gbk");

con.header("accept-language", "zh-cn");

con.header("referer", "***************xx");

con.header("accept-encoding", "gzip, deflate");

con.header("user-agent", "mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; wow64; trident/5.0))");

con.header("host", "***************xx");

con.header("connection", "keep-alive");

con.header("cache-control", "no-cache");

con.header("cookie", cookie);

con.data(reportdatas);

try catch (interruptedexception e) catch (ioexception e)

}

按常規設定好http頭部,以jsoup1.6.1版本提交資料reportdatas和cookie,提交後檢視伺服器返回資料是亂碼。經查證,jsoup1.6.1預設是以utf編碼提交,已經寫死,沒法更改。

在jsoup官網上看見有postdatacharset方法,可以在提交資料時指定編碼方式。但是jsoup1.11.3貌似不支援jdk1.6,公升級到jdk1.8後可以正常使用。然後用postdatacharset設定編碼為gbk,如果之前專案編碼為gbk就會省事很多,不用轉碼。如果之前編碼為utf-8,那提交資料前必須轉成gbk。

神奇的事情發生了,如果是直接用con.post方法提交,無論怎麼弄從伺服器查出來的資料都是亂碼,說明提交出去的資料已經是亂碼了,這可以從抓包中可以證實。在經歷多次測試後,已經基本快要放棄了,查資料時不經意間使用con.method(connection.method.post).execute()提交資料後,伺服器反饋的資料不是亂碼了!折騰了2天的難題豁然解決,這種心情沒法形容。但仍然疑問的是,用con.post和con.method(connection.method.post).execute()這兩種方式提交資料有區別嗎?從實際測試的結果來看,con.post方式仍然是已預設的utf-8提交,con.method(connection.method.post).execute()是以你指定的編碼方式提交,但兩種方法的前提條件是必須用postdatacharset指定編碼,如果不指定,兩種方式都是以utf-8編碼提交資料。這其中的原因有明白的指導為謝。

POST提交資料方式

當直接提交form表單時,預設就使用此種方式。這又是乙個常見的 post 資料提交的方式。我們使用表單上傳檔案時,必須讓 form 的 enctyped 等於這個值。上傳資料使用,不過多闡述。json 格式支援比鍵值對複雜得多的結構化資料,這一點也很有用。記得我幾年前做乙個專案時,需要提交的資料層次...

get提交方式和post提交方式的區別

最近一次面試被問到這個問題了,自我感覺答得不好,所以整理下來加深下印象 get提交方式和post提交方式的區別?1 get是明文傳參,所有引數都在url位址列裡顯示,較不安全,而post傳參是通過request body實體 提交後位址列裡看不到引數,相對get而言較安全些。2 get傳遞的引數有限...

常見的 POST 提交資料方式

http請求方法 根據http標準,http請求可以使用多種請求方法。http1.0定義了三種請求方法 get,post 和 head方法。http1.1新增了五種請求方法 options,put,delete,trace 和 connect 方法。序號 方法描述 1get 請求指定的頁面資訊,並返...