2011-04-15 61 views
0

下面是這種情況。我寫的代碼使用檢索的cookies和同一個數字證書使用數字證書從一個安全的網址,以獲取餅乾,以進而POST數據返回到另一個URL。一開始工作和餅乾取出,在POST回來與我安裝小提琴手,看看發生了什麼錯誤500 ... POST看起來很好...餅乾都存在。我在fiddler中使用了該功能,允許通過拖放創建請求。 POST從C#代碼錄製的完全相同的POST記錄在fiddler中,它的工作原理!的HttpWebRequest到HTTPS服務器提琴手而不是從Visual Studio的工作

什麼是小提琴手這樣做,Visual Studio是不是?它必須做的東西,如果小提琴手能後的數據,但Visual Studio中返回一個錯誤500.這是下面的代碼:

X509Certificate cert = new X509Certificate("mycert.pfx", "certpassword"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://servertoGETcookies/fileUpload.html"); 
req.CookieContainer = new CookieContainer(); 
req.Method = "GET"; 
req.ClientCertificates.Add(cert); 

HttpWebResponse Response = (HttpWebResponse)req.GetResponse(); 
CookieCollection ck = req.CookieContainer.GetCookies(req.RequestUri); 
string strcookie = ck[0].Value; 
string strcookie2 = ck[1].Value; 
Response.Close(); 

req = (HttpWebRequest)WebRequest.Create("https://servertoPOSTdatawithcookies/main"); 
req.CookieContainer = new CookieContainer(); 
Cookie auth = new Cookie("_wl_authcookie_", strcookie2); 
Cookie jsess = new Cookie("JSESSIONID", strcookie); 
auth.Domain = "server"; 
jsess.Domain = "server"; 
req.CookieContainer.Add(auth); 
req.CookieContainer.Add(jsess); 
req.ClientCertificates.Add(cert); 
req.Method = "POST"; 

Byte[] data = ReadByteArrayFromFile("filewithdatatoPOST.txt"); 
req.ContentLength = data.Length; 
Stream myStream = req.GetRequestStream(); 
myStream.Write(data, 0, data.Length); 
myStream.Close(); 

HttpWebResponse Response2 = (HttpWebResponse)req.GetResponse(); 
Stream strm = Response2.GetResponseStream(); 
StreamReader sr2 = new StreamReader(strm); 
Response2.Close(); 

回答

0

請問您的代碼工作,如果你設置

req.ServicePoint.Expect100Continue = false; 
在所有WebRequests

+0

謝謝,但現在還有另外一個問題。來自提琴手的帖子迴應了預期結果(即提交了x)。從Visual Studio發佈的帖子好像沒有帖子(即和我沒有發佈任何內容一樣)。 – Chad 2011-04-15 17:38:51

+0

文件中的文本,我發帖是想充當如果我按下按鈕來上傳數據文件:'code' - 時間戳內容處置:表格數據; name =「action」FILEUPLOAD --timestamp Content-Disposition:form-data; NAME = 「browseFile」;文件名= 「fileuploading.txt」 的Content-Type:text/plain的儀表日報*** 12345,123,單位,04 /2011分之111,123.000 2,123.000 – Chad 2011-04-15 17:39:51

+0

對不起......試圖爲有用的,但我標記在這裏沒有足夠的聲譽。 – Chad 2011-04-15 17:41:56

0

解決!這與Expect100Continue無關。

所以,故障排除後,周.... 6級不同的程序員....我想通了。我不知道這是否是總是正確的,但在這種情況下,問題是,我們從得到的cookie的網址:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://servertoGETcookies/fileUpload.html"); 

是不一樣的,我們是張貼數據傳回的網址:

req = (HttpWebRequest)WebRequest.Create("https://servertoPOSTdatawithcookies/main"); 

獲取餅乾和張貼回相同的URL解決了該問題:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://servertoGETandPOSTcookies/main"); 
req = (HttpWebRequest)WebRequest.Create("https://servertoGETandPOSTcookies/main"); 
相關問題