.net下模擬瀏覽器行爲

.net下http或https請求實現流水線的執行別人的網站的功能


       起這個標題只是爲了讓那些不懂實際情況的點進來看看而已偷笑,實際上瀏覽器上的操作還是一個個請求,這與什麼語言的請求是一樣的過程,只不過大多數人想到做這個的時候還是會想到瀏覽器這個關鍵詞,所以也只有這個才能提高瀏覽率,嘿嘿。。。


        在某一次工作需求做了相關的工作,特此記錄下,網上相關的文章很多,但是有時候環境,代碼理解不同會導致這些文章不適合你當前的坑,但是實話大多數的坑是自己埋得也是自己的經驗不足導致的,更大情況就是自己懶,總想別人解決了拿來用。我當時的情況就是大概知道怎麼去做,真正去做的時候,就發覺網上拿來的代碼完全沒效果,一開始網站返回了sessiontimeout,當然懵懂的我還以爲是系統返回的而非別人設置的,這個就好比標題那樣瀏覽器這個梗,當然本人鳥語水平不高,對這個單詞解讀也讓我痛苦了好久,然後是去看網上的文章得到了大致的意思就是sessionid不對,那麼解決的辦法就是請求頭帶去sessionid,於是就有了這句代碼    httpWebRequest.CookieContainer = cookieContainer;  其實這句也只是解決了session的問題,當我提交過去的時候得到了一個錯誤的頁面,但是這時候的我還是不知道怎麼搞,畢竟用了postman模擬了請求就是這樣子的,那時候還以爲是請求頭信息缺了哪個,結果自造session以及請求頭一致後還是不行,比較了很久postman的東西,後面纔看到了提交表單的形式,20180521153552209.png看到這裏其實已經接近答案了,可惜有時候人蠢是不會知道這就是答案的,很明顯我只會在表頭標明這是form的形式,而不在意數據的格式是不是對的,就這樣問題沒解決,方向放在了sessionid上面去,老是在懷疑這個c#的寫法是不是會自己添加一些東西,而且動用了抓包工具去抓這個進程包,很顯然我不熟這些抓包軟件導致抓包時是不成功的,後面還延伸了要換語言,因爲網上常常搜索到.net版本不同會讓這個httpWebRequest會有個bug出現,這就更讓沒有頭緒且基礎薄弱的我堅定了錯誤方向了,但是在換語言的道路上還是失敗的,主觀是自己太懶了,遇到複雜的配置環境就沒那個幹勁了,當時念頭只有放棄,終於到了最後一刻,看了下postman的這個20180521154225791.png功能,其實這個在c#上的code是不太建議看的,因爲引用的是別人寫的庫,這裏沒有標明,導致你後面找這個庫的時候會路途遙遠,且找到了還是用不了,所以最好還是看它實實在在的原生http是怎麼定義這一塊的,當時懷疑httpWebRequest這種寫法的時候有嘗試過直接socket來直接實現https請求的,後面還是因爲複雜纔沒弄,想想其實所謂的https的請求也就是一個流裏面的信息包括了這些標明的字符串,實際上還是一個流,並沒有華麗的封裝,只是邏輯上封裝看起來這是一個很複雜的東西。後面走投無路時,終於索性一搏,把http code裏面的form數據放上去,結果是真的可以了,這讓我想到了這些數據要urlcode,但是無奈這樣的code會讓本來正常的符號會變了,然後那邊的解碼就不對了,所以還得自己Replace來替換特殊的東西,但是這樣就很麻煩至少在提交這種  x-www-form-urlencoded 的形式上,然後我又想到要提交這種form-data呢,發覺這種是不用處理特殊符號的,但是要有相對應的符號去區分這些是什麼,比如這一串 ------WebKitFormBoundary7MA4YWxkTrZu0gW--  很怪異,結果就是還是麻煩,發現離開封裝回到底層是啥也不會,老是渴望點出來的東西實在不現實。


      再次補充下,就是要注意設置請求的超時時間,最好的做法就是異步等待請求,有了消息再去通知前臺。不然超時返回的就是空白的東西,再根據空白的東西處理的話,這樣的邏輯會出很多問題。但是也不可能無限制的等待下去,必要時要提醒下前臺操作。


       路途且遙,莫爲己傷。。。


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