1. 程式人生 > >修復.NET中通過HttpWebRequest 中GET 方法丟失Cookie的bug

修復.NET中通過HttpWebRequest 中GET 方法丟失Cookie的bug

最近在專案中通過.NET的 Request.Create 和Request.Respon 進行跨域請求資料,在使用post進行請求是,自己儲存的cookie會傳遞過去,但是通過Get 進行遠端伺服器請求資料時會丟失Cookie,也不知道為何傳遞不過去,經過百般搜尋找到了一個fixCookies方法,可以把Cookie傳遞過去,因此記錄下來,供大家使用。

public Stream GetStreamDataByGET(string url,HttpContext context)
        {           
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create
(url); request.Method = "Get"; if (!string.IsNullOrEmpty(context.Request.Headers["Cookie"])) { request.Headers.Add("Cookie", context.Request.Headers["Cookie"]); } HttpWebResponse response = (HttpWebResponse)request.GetResponse
(); FixCookies(response, context); Stream stream = response.GetResponseStream(); return stream; } private void FixCookies(HttpWebResponse response, HttpContext context) { if (response.Headers["Set-Cookie"] == null) { continue;
} string value = response.Headers.Get("Set-Cookie"); HttpCookie cc = null; foreach (var singleCookie in value.Split(',')) { Match match = Regex.Match(singleCookie, "(.+?)=(.+?);"); if (match.Captures.Count == 0) { continue; } context.Response.Headers.Add("Set-Cookie", response.Headers["Set-Cookie"]); cc = new HttpCookie(match.Groups[1].ToString(),match.Groups[2].ToString()); context.Response.SetCookie(cc); } }

相關推薦

修復.NET通過HttpWebRequest GET 方法丟失Cookie的bug

最近在專案中通過.NET的 Request.Create 和Request.Respon 進行跨域請求資料,在使用post進行請求是,自己儲存的cookie會傳遞過去,但是通過Get 進行遠端伺服器請求資料時會丟失Cookie,也不知道為何傳遞不過去,經過百般搜

php通過post和get傳遞陣列的方法

1.php中通過post方式傳遞陣列 將input中的name屬性寫為xx[]形式。 eg <form action="" > <input type="text" name="myname[]"> <input type="text" na

InputStream通過mark和reset方法重復利用緩存

輸出 string sys 都是 實現 源碼 常用 ges 不支持 通過緩存InputStream可重復利用一個InputStream,但是要緩存一整個InputStream內存壓力可能是比較大的。如果第一次讀取InputStream是用來判斷文件流類型,文件編碼等

JAVA關於set()和get()方法的理解及使用

當我 一般來說 怎麽 而是 知識 了解 構造 set 今後 https://www.cnblogs.com/fly-sky-han/p/6564439.html 我們先來看看set和get這兩個詞的表面意思,set是設置的意思,而get是獲取的意思,顧名思義,這兩個方法是對

Python 的字典的get()方法(關鍵詞:dict.get(key, default=None))

描述 Python 字典(Dictionary) get() 函式返回指定鍵的值,如果鍵不在字典中返回預設值。 語法 get()方法語法: dict.get(key, default=None) 引數 key – 字典中要查詢的鍵。 default – 如果指定鍵的值

java關於set()和get()方法的理解和使用

  我們來了解一下JAVA面向物件程式設計中的封閉性和安全性。封閉性即對類中的域變數進行封閉操作,即用private來修飾他們,如此一來其他類則不能對該變數訪問。這樣我們就將這些變數封閉在了類內部,這樣就提高了資料的安全性,當我們想要操作這些域變數怎麼辦呢?我們可以通過兩種方法,第一中即通過public方式的

android開發通過aidl實現遠端方法呼叫

在安卓開發過程中我們可能見過這樣的問題,就是在一個應用中呼叫另一個應用中的服務,並呼叫該服務中的方法。 我們可能對呼叫服務並不陌生,可是要執行服務中的方法,卻不能直接呼叫。因為兩個服務和呼叫它的程式屬

重寫Swift的set和get方法

//定義一個變數 var _tittle: String? var tittle: String?{ set{ _tittle=newValue } get{ return _tittle

C#的set和get方法

在面向物件程式設計(OOP)中,是不允許外界直接對類的成員變數直接訪問的,既然不能訪問,那定義這些成員變數還有什麼意義呢?所以C#中就要用set和get方法來訪問私有成員變數,它們相當於外界訪問物件的一個通道,一個“介面”。先來看一段程式碼: class Employee 

防止通過POST和GET方法SQL注入的兩個最徹底過濾程式

先針對POST遞交上來的資訊過濾程式 Public Function filterStr(str)    str=replace(str,CHR(59),";") '“;”    str=replace(str,CHR(38),"&") '“&”  

Android 通過網頁的連結開啟自己的APP(scheme)

       頁面需求:最近遇見一個需求,點選他人分享的資訊,進入一個網頁,網頁中點選“開啟”按鈕,若手機中沒有此APP則下載,我給的是我們公司官網上的下載地址,若手機中有此APP則開啟,開啟地址就是我們今天要說的。其他需求,通過用手機的瀏

Hibernate學習筆記---通過load和get方法來查詢物件(只能根據主鍵來查詢)

下面的例子是說明如何來查詢一個物件。 get方法(get方法一經呼叫,會立即發出get方法) package com.ahuzl.hibernate; import java.util.Date;import org.hibernate.Session;import org

VC++通過ADO的_RecordsetPtr操作資料庫:增刪改查

_RecordsetPtr智慧指標,它是專門為通過記錄集操作資料庫而設立的指標,通過該介面可以對資料庫的表內的記錄、欄位等進行各種操作。 要搞清楚:資料庫和ADO的記錄集是兩個不同的概念,是存在於不同物理位置的兩個儲存空間。記錄集相當於是實際資料的一份拷貝。正因為記錄集是相對脫離資料庫而存在的,所以才存在後

Windows7系統通過vagrant使用Centos7搭建LAMP環境

一 安裝Vagrant並啟動Centos7 這裡我使用的是virtualbox作為vagrant的支援,首先自行安裝virtualbox,Windows下安裝很方便,就不講了, 接下來是安裝vagrant   根據提示安裝。 https://atlas.hashicorp.

Hibernate通過傳入實體的主鍵id來使用get方法獲取整個實體的內容問題

做老專案的一個需求變更,遇到一個問題,我直接呼叫封裝好的dao中的get方法,傳入引數這個實體的主鍵,結果報下面的錯誤: 八月 31, 2018 11:14:49 上午 org.apache.catalina.core.StandardWrapperValve invoke 嚴重:

.Net通過DataSet直接更新資料庫相關問題和解決方法

一般存在的問題: 1. 沒有acceptchange2. 資料庫中表沒有設定主鍵 解決方法: 使用DataAdapter的update方法更新資料,該資料表必須設定主鍵,那是因為這個方法的實現原理實際上只不過是根據表結構和主鍵自動生成SQL 也許你的資料表本身是有主鍵的,但是

hibernate懶加載急加載的區別,get方法和load方的區別法

() session 執行 語句 style 開啟 異常 方式 速度 懶加載是hibernate中的關聯關系對象的默認方式,懶加載也會先去查詢對象然後獲取對象的id, 當正真要對數據進行使用時才會正真寫sql語句。 懶加載的有效加載期是在session打開的時候,所以在我們

Hibernateget方法和load方法的區別

pub 機制 否則 on() color 檢索 不存在 bsp 數據庫查詢 1.從返回結果上對比: load方式檢索不到的話會拋出org.hibernate.ObjectNotFoundException異常; get方法檢索不到的話會返回null; 2.從檢索執行機制上對

在Java Web程序使用監聽器可以通過以下兩種方法

output pla extend 標識 ade 介紹 gets str override 之前學習了很多涉及servlet的內容,本小結我們說一下監聽器,說起監聽器,編過桌面程序和手機App的都不陌生,常見的套路都是拖一個控件,然後給它綁定一個監聽器,即可以對該對象的事件

Java通過方法創建一個http連接並請求

servlet 讀取 mage equals contex method ade temp password 1.Java代碼創建一個連接並請求該連接返回的數據 doGet()方法,execute()方法中調用 package demo2.x.com;