Android中將curl轉http

前置:由于Android本身不支持curl,若要在Android中使用curl,必須引入curl庫:

將curl庫打包成.so文件—>研讀提供的相關方法—>編寫JNI中間層—>使用native關鍵字調用JNI中的方法

? ? ? ? ? ?curl庫提供的方法很多,從打包至最終調用,整個過程比較復雜,若當前只需要curl用作少量網絡請求,可以考慮將curl請求轉換成http。

? ? ? ? ? ?基本上,curl請求都可以轉換成http請求,因為抓包觀察發現,curl最后還是會使用應用層http協議去發送。

一、轉換方法

步驟一:用Charles給本機請求抓包,先用curl命令在電腦本地curl通一次,抓包獲取整個請求信息,重點關注:url、請求方式、請求頭、request、response code、response,前5項都是轉http必要的內容

? ? ? ?步驟二:在Android中,創建HttpURLConnection請求,設置請求方式(與步驟一種的請求方式保持一致:get、post、put等)

? ? ? ?步驟三:給http請求設置請求頭(與步驟一中的請求頭保持一致,注意排除一些無用的請求頭信息,例如Postman-Token、Host、accept-encoding等),額外說明:

1、若curl頭信息中包含用戶名密碼,則在http的請求頭中添加Authorization字段,內容為用戶名:密碼?用base64加密后的內容

2、若curl頭信息中包含content-length字段,則在http的請求頭中添加content-length字段,內容為請求的request body中的數據長度。

? ? ? ?步驟四:給http傳遞request參數內容(與步驟一中的request內容格式保持一致:json格式等),額外說明:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若遇到上傳文件的請求,要尤其注意觀察request內容格式:有時要求文件上傳前后需要分割符

? ? ? ?步驟五:查看步驟一中的response code,根據response code值做為正確返回的response code值(有可能不是200,而是201、204等),額外說明:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若遇到response code為400,獲取返回信息時,若直接獲取conn.getInputStream()會報錯,需要改為獲取conn.getErrorStream()。因為code為400時,返回的response內容被底層處理截取了。

二、舉例說明

? ? ? 1、上傳文件至JIRA

? ? ? ? ? ? Charles抓包:

?轉換后的代碼塊:

? ? ?2、普通的post請求

Charles抓包:

?轉換后的代碼塊:

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,868評論 18 139
  • 轉載自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce閱讀 2,294評論 1 5
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,420評論 6 152
  • 組織:中國互動出版網(http://www.china-pub.com/) RFC文檔中文翻譯計劃(http://...
    Palomar閱讀 1,595評論 0 6
  • 光陰愛笑 留下一路的皺紋 光陰愛哭 看見年輕的照片眼睛就發酸 光陰善忘 已經忘了當初滿懷勇氣的理由 光陰喜新厭舊 ...
    春雨_6c78閱讀 231評論 0 0