分享

【 POST/GET教程】登錄QQ空間發表日誌&POST上傳相冊圖片

 ipilipala 2017-01-01
 本簡易教程,不講解抓包知識及一些比較理論性的知識,不懂的請自行百度學習;
該教程主要講述aardio的http庫的POST及GET操作方面涉及的函數用法,及分析過程,按步驟貼出相關代碼(不是完整程序代碼);目的讓你們在理解學習的知識基礎上,自己動手寫一個滿足自己需求的完整程序出來。而不是簡單的COPY!

後台提交需要分析數據及不斷調試,比較耗費時間及精力,一般建議還請採用模擬操作,方便快捷。

一. 基礎知識

1.1 編碼知識


  • URL 編碼
       在互聯網上傳送數據時,只能採用ASCII字符集。但由於數據常常包含ASCII字符集以外的字符(如中文)
       所以我們必須對數據轉換為有效的ASCII字符格式,也就是URL編碼。

在aardio裡,轉換URL編碼的函數庫就是inet.url
inet.url.decode("需解碼的字符串") —— 調用unEscape函數
inet.url.encode("需編碼的字符串") —— 完全URL編碼,此函數將所有非字母非數字字符進行URL編碼

示例:
import inet.url

var url = "https://svn./svn/aardio/Tools/%e4%b8%80%e9%b9%a4%e8%ae%ba%e5%9d%9b%e8%be%85%e5%8a%a9%e5%b7%a5%e5%85%b7/"
var str = inet.url.decode(url)// 解碼

str=string.fromto(str)
// 加上這句把UTF8轉為ASCII碼就可正常顯示

io.open()
io.print(str)

//顯示 https://svn./svn/aardio/Tools/Jacen論壇輔助工具/


  • 內碼轉換
       涉及的網頁編碼常用有:gb2312(936)、big5(950)、 utf-8(65001)   POST數據是以utf-8 形式
       936代表是簡體中文gb2312 ,而950代表繁體中文,65001就是我們說的 UTF-8編碼了.
       POST/GET操作時,必須要瞭解網頁的編碼,根據實際需要進行編碼轉換,否則你會看到亂碼的字符或提交不成功。

在aardio裡,默認的核心string庫就有轉換函數。
string.fromto(」需轉換的字符串「,需轉換的編碼,目標轉換編碼) —— 不填寫編碼參數, 默認將utf-8轉為gb2312

//string.fromto 函數原型
functiong(s,cp=65001,tocp=0){
   
if(!s){return};
    s=string.toUnicode(s,cp);
    renurn s&string.fromUnicode(s,tocp);
}
str = string.fromto(str,fromcp=65001,tocp=0)

該函數首先將fromcp編碼的字符轉換為unicode編碼,再從unicode編碼轉換為tocp編碼。
在任何兩種codepage(包括UTF8)之間轉換編碼都應當先轉換為unicdoe編碼
順序為: codepage1-->unicode->codepage2

示例:
var str_utf8 = "E鉶庡崱閫氬浘鍍?"//utf-8
var strTogb = string.fromto(str_utf8)//默認utf8轉換為gb2312

var str_gb = "E虎卡通圖?"//gb2312
var strToutf8 = string.fromto(str_gb,936,65001)//把gb2312轉換為utf-8

io.open();
//打開控制台
io.print(strTogb,strToutf8);


  • JSON轉換
       有些網站提交後,返回的內容是JSON編碼,此時會根據需要提取內容進行下一步的操作。

在aardio裡,由web.json庫提供json字符串的解碼和編碼,所謂解碼就是把json字符串轉換成aardio裡的table,所以取值的話按table的方法即可;而編碼則是把aardio裡的table序列化成json字串。

web.json.parse(「json數據」) —— json字符串轉換為table
web.json.stringify(「table對象」) —— 轉換為json字符串


1.2 HTTP 頭知識
POST/GET操作,需 對HTTP協議有一定瞭解, 詳細的知識可以百度學習,這裡只是簡單列舉一些相關的HTTP頭知識;
透過抓包,可以看到下面的數據:


  • 請求頭內容
       Accept:客戶機支持的數據類型
       Accept-Charset: 客戶機採用的編碼
       Accept-Encoding: 客戶機支持的數據壓縮格式
       Accept-Language: 客戶機的語言環境
       Host: 訪問的主機名      
       Referer: 請求來自於哪個頁面
       User-Agent: 瀏覽器相關信息
       Cookie:瀏覽器暫存服務器發送的信息
       Connection: 請求完後關閉或保持連接
       Date: 請求網站的時間



  • 響應頭:
      Location: 控制瀏覽器顯示哪個頁面(通常是302跳轉)
      Content-Encoding: 服務器發送的壓縮編碼方式
      Content-Length:服務器發送顯示的字節碼長度
      Content-Language: 服務器發送內容的語言和國家名
      Content-Type: 服務器發送內容的類型和編碼類型      
      Content-Disposition: 服務器控制瀏覽器發下載方式打開文件      
      Set-Cookie:服務器發送Cookie相關的信息
      Date: 響應網站的時間



  • HTTP常見狀態代碼
       200 (OK): 找到了該資源,並且一切正常。
       302(Found): 重定向,發現新的連接請求信息
       304 (NOT MODIFIED): 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的緩存機制。
       401 (UNAUTHORIZED): 客戶端無權訪問該資源。這通常會使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到服務器。
       403 (FORBIDDEN): 客戶端未能獲得授權。這通常是在401之後輸入了不正確的用戶名或密碼。
       404 (NOT FOUND): 在指定的位置不存在所申請的資源。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多