摘要:通常情況下,第一次請求完畢后,服務器都會給客戶端返回一些字段,在第二次請求時,如果使用的是測試工具或者的這個庫,字段都會自動被附加在第二次請求的頭部。從里取出前一次請求中由服務器返回的這里把里的加到第二個請求的頭部字段,謎底就這樣解開了。
我們用apache的HttpClient這個庫消費云端的Restful API時,一般都需要兩次HTTP調用,第一次獲得某種token,比如獲取防止跨域請求偽造攻擊Cross-site request forgery - CSRF的token,或者比如微信API的access token,第二次再進行真正的API消費。
通常情況下,第一次請求完畢后,服務器都會給客戶端返回一些cookie字段,在第二次請求時,如果使用的是postman測試工具或者apache的HttpClient這個庫,cookie字段都會自動被附加在第二次請求的HTTP頭部。詳情可以參考我寫的另一篇博客:OData service parallel performance measurement – how to deal with XSRF token in Java Program and JMeter
https://blogs.sap.com/2017/08...
本文就來介紹apache的HttpClient,在發送第二個Http請求時,是如何自動插入從第一個請求獲得的服務器頒發的cookie的。
首先進入HttpClient的單步調試:InternalHttpClient.doExecute方法:
第85行的origheaders,即取出程序員在代碼里指定的http請求頭部字段,比如basic Authentication,content-type,token等等:
這個cookie是什么時候傳進來的?
看來我們必須進入httpcore-4.4.3.jar這個apache HttpClient的實現里去調試。
經過觀察發現,一旦我執行完204行的conn.sendRequestHeader方法,就能觀察到Cookie被自動設置了,所以奧妙就在第204行里。
自動添加Content-Length頭部字段:
由此可見Content-length是通過方法entity.getContentLength()自動計算出來的,因此我們程序員不必在自己的應用代碼里重復這個計算動作。
自動加入host字段:
自動加入Connection: Keep-Alive
UserAgent的自動填充:Apache-HttpClient/4.5.1, 這個也不用程序員操心。
終于到了我要找的RequestAddCookies這個HTTPRequestInterceptor了。光從這個類的字面意思就能猜到它和HTTP請求的Cookie有關。
新建一個Cookie,這個CookieOrigin構造函數里的hpst,path和secure標志位都是Chrome開發者工具的Cookie標簽頁里能看到。
從 Cookie Store里取出前一次請求中由服務器返回的Cookie:
這里把Cookie store里的cookie加到第二個請求的頭部字段,謎底就這樣解開了。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104928.html
摘要:通常情況下,第一次請求完畢后,服務器都會給客戶端返回一些字段,在第二次請求時,如果使用的是測試工具或者的這個庫,字段都會自動被附加在第二次請求的頭部。從里取出前一次請求中由服務器返回的這里把里的加到第二個請求的頭部字段,謎底就這樣解開了。 我們用apache的HttpClient這個庫消費云端的Restful API時,一般都需要兩次HTTP調用,第一次獲得某種token,比如獲取防止...
摘要:所以跨域請求分兩種簡單請求和預檢請求。但對于第二個錯誤,好像沒法向第一種那樣,將預檢請求轉變為簡單請求,所以,只有尋找方法怎么在后端實現相應的預檢請求,來返回一個狀態碼,告訴瀏覽器此次跨域請求可以繼續。 引子 自從從JAVA偽全棧轉前端以來,學習的路上就充滿了荊棘(奇葩問題),而涉及前后端分離這個問題,對cors的應用不斷增多,暴露出的問題也接踵而至。這兩天動手實踐基于Token的WE...
摘要:所以跨域請求分兩種簡單請求和預檢請求。但對于第二個錯誤,好像沒法向第一種那樣,將預檢請求轉變為簡單請求,所以,只有尋找方法怎么在后端實現相應的預檢請求,來返回一個狀態碼,告訴瀏覽器此次跨域請求可以繼續。 引子 自從從JAVA偽全棧轉前端以來,學習的路上就充滿了荊棘(奇葩問題),而涉及前后端分離這個問題,對cors的應用不斷增多,暴露出的問題也接踵而至。這兩天動手實踐基于Token的WE...
閱讀 1767·2023-04-26 01:44
閱讀 1209·2021-11-12 10:34
閱讀 1578·2021-09-09 09:33
閱讀 1728·2019-08-30 15:44
閱讀 2892·2019-08-30 13:49
閱讀 2189·2019-08-29 15:26
閱讀 942·2019-08-26 13:30
閱讀 1409·2019-08-23 18:15