這一次我掉進了Unirest的坑

2022-08-23 07:06:10 字數 1334 閱讀 3926

我們常見的**如 是由多級的結構(目錄/資料夾)組成的,這裡關注的是其中的aaa和bbb,它們之間用斜槓(/)分隔。從最大自由度來講,每一級結構的名字是可以隨意取的。既然名字可以隨意取,而且上下級之間是用/來做分隔,那麼如果名字裡面有斜槓要怎麼辦呢?可能有人說windows不允許啊,在windows資料夾或者檔案的名字裡面不能出現斜槓,在web是允許的。由於斜槓在**中代表上下級結構的分隔符,所以如果某一層的資料夾出現斜槓的話,必須進行轉碼。具體的這個斜槓就得轉成%2f,即是百分號後加2位十六進製制表示的ascii碼。所以%2f代表資料夾名字中的斜槓,不代表上下級資料夾的分隔。

現在軟體web化非常流行,而且多數是前後端分離,所以web api通常是給前端調的。但也存在一種可能,就是我們自己寫乙個軟體需要去訪問(呼叫)別人的web api。此時就需要一些元件封裝了http協議,然後我們就可以方便地使用。這樣的元件很多,但是由於http協議比較複雜,所以實現這樣的元件要做到強大+易用,還真的不太容易。在眾多http元件之中,unirest就是難得的封裝得非常好用的一套元件。

啟動機器除錯。什麼?404(找不到檔案資源)?我沒看錯吧?各種檢查,沒有發現原因。把**中的**複製到瀏覽器,結果401(未登入)。因為我沒有傳送認證引數,401就是對的。我多麼想**也能得到401,可他卻就是404!但是404是個很不好解決的問題。我知道,資源就在那裡,誰知道哪個地方寫錯了呢。伺服器就告訴你「找不到。至於**寫錯了,不知道,你猜」。我進行了各種嘗試,也包括把%2f變直接變成斜槓去訪問伺服器,給的回答是。專案不存在,狀態碼是200。事情陷入了僵局。

經同事提醒,使用了抓包工具。原來unirest真的「幫我」把%2f轉成斜槓了!好吧,既然你會幫我一次解碼,那我就編碼兩次,讓你解一次結果就剛好是對的。編譯碼我還是懂的。查了一下%的編碼是%25,於是我把**變成這樣程式執行,又是404!從抓包工具來看,……,這次他就乾脆不解碼了,你說氣不氣人?整個人又陷入了絕望。我那麼信賴的unirest,怎麼會出現這樣的bug?

接下來怎麼辦?我還能有其他的選擇嗎?第一,其他的元件我也不熟,出了問題更是難排查。第2,unirest基本是業界最好的了,他都搞不定,其他元件會更好嗎。

後來又經過各種排查,排查到了unirest的源頭,我又再次去了 看到了這一幕

使用unirest要留意你使用的是哪個unirest

當遇到一些技術問題,走投無路的時候,可以在各個分叉點進行嘗試。所以呢,在研發或選型的過程中就要記錄這些分叉點。典型的就是有多種選擇的時候。

現在覆盤寫出來思路很清晰,但是人在事中時,是帶著混亂的。往往到了山窮水盡疑無路,而不知道**有柳暗花明又一村。

這一次,讓我仗劍而行

不知不覺,搞oi已有一年了。從一無所知到現在站在noip的大門前,我知道,機會只有一次。沒有失誤的機會,沒人會傾聽你的苦與你的累。小時候一直很怯懦,總是猶疑不決,辜負了多少韶光。所以,這一次,就讓我仗劍而行。這把劍並未成形,只有劍胎隱約可見。但在今天,少年笨拙地將劍抗在肩上,釀蹌著,卻一步一步,堅定...

「這一次母親不會原諒我」作文《孟婆湯》全文

2017第五屆新少年作文大賽,近萬名參賽選手中,236位中小學生脫穎而出進入總決賽。著名作家餘華為總決賽親自命題,房子 和 我是誰 二選一現場限時作文。在閱卷過程中,有篇文章打動了作家余華 畢飛宇 葉兆言等人,成為高中組一等獎作品。原文如下 母親已有六十九個日夜不曾跟我講一句話。我還記得她從前拋下的...

這一次我要真正學會C語言

題圖來自pexel 不知道從什麼時候開始,我的腦海裡就植入了乙個想法,我要學會c語言 雖然我在大學時學過c語言,還參加過c語言等級考試,但是我現在能寫的 也就是 hello world 而已。你讓我用c語言具體的完成一些事情,比如說讀取乙個fastq檔案將其轉成乙個fasta,我甚至都不會開啟檔案。...