2016-11-23 20 views
0

嗨,我想使用tcpclient類發佈到登錄頁面。但它說302錯誤。同樣的事情,我可以使用webclient做。請建議我缺少什麼東西。 我已經實現了使用webclient類。但我已經要求在較低的水平上做。請建議。http post在c#中使用tcpclient不工作

我試圖以下

string sPost = "POST http://www.udupikrishnarestaurant.com/ HTTP/1.1\r\n" + 

"Host: www.udupikrishnarestaurant.com\r\n" + 

"Connection: keep-alive\r\n" + 

"Content-Length: 632\r\n" + 

"Cache-Control: max-age=0\r\n" + 

"Origin: http://www.udupikrishnarestaurant.com \r\n" + 

"Upgrade-Insecure-Requests: 1\r\n" + 

"User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 \r\n" + 

"Content-Type: application/x-www-form-urlencoded\r\n" + 

"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 \r\n" + 

"Referer: http://www.udupikrishnarestaurant.com/ \r\n" + 

"Accept-Encoding: gzip, deflate, br\r\n" + 

"Accept-Language: en-US,en;q=0.8\r\n" + 

"\r\n" + 

"__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=/wEPDwUKLTM0ODY4NTA5Mg9kFgRmD2QWAgIBDxYCHgdWaXNpYmxlaGQCAQ8WAh4EVGV4dAUOMTgyLjY5LjEwOC4yMTFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBQlidG5TdWJtaXQFCWJ0bkZvcmdvdCvBSicNzlFc1g4UTZeO96HhGK8T&__VIEWSTATEGENERATOR=CA0B0334&__EVENTVALIDATION=/wEdAAr0HIr+WBkxh8yUckvqwLD4LqRynaTFa/5Hs7sApa3/2aRDGrH080vTDzQFiILKSswLyPw09K59GBb2rr9Ouzg352npSE7sRexHKIcGFqd4MCl0Pj8zqX34hAcL3lPJ6TZjemWCTRgEB59HPczIGVNwdjb4xzpKucCqKjegIpvFhjzmltaUM7aEAN+g9cP/m13MQ92x/wmKgUDwu+2MEZnSA5KkNGEzQJYQmFWkBWmYqAdLpnM=&ddlFloor=2&txtUserName=test&txtPassword=1234&btnSubmit.x=15&btnSubmit.y=3"; 


byte[] buf = new byte[1024]; 
    string header = sPost; 

    var client = new TcpClient(); 
    client.Connect("182.50.132.48", 80); 

    // send request 

    var stream = client.GetStream(); 
    var streamReader = new StreamReader(stream); 
    var streamWriter = new StreamWriter(stream); 

    streamWriter.Write(header); 
    streamWriter.Flush(); 
    stream.Flush(); 

    // get response 

    var response1 = streamReader.ReadLine(); 
+1

302是一個重定向。完整的服務器響應應該告訴你你需要做什麼 – BugFinder

+0

'Upgrade-Insecure-Requests:1'可能會導致服務器發送302重定向到HTTPS url,請嘗試刪除它。很難看到在套接字級別執行此操作的情況,HTTP客戶端中構建的框架之一是更好的選擇。 –

回答

0

302不是錯誤。這是一個重定向請求 - 表單告訴你「去那裏」,很可能是你的登錄嘗試的結果。 WebClient處理重定向,您的客戶端不。

有很多HTTP要實現。除非這純粹是練習,否則不要嘗試編寫自己的HTTP客戶端。重定向只是冰山的最高點。

+0

有辦法實現..我想看到登錄頁面後submition。 –

+0

我想用低級別來更快地做出迴應。 –

+0

@marcskumar你認爲你會比.NET BCL的開發人員做得更好嗎?爲什麼?您是否計劃跳過流程的某些部分,因爲它們對於您的用例來說是不必要的,或者您是否認爲「較低級別」意味着「更快」? 'WebClient'甚至不使用'TcpClient'。你打算實現自己的連接池嗎?緩存?你考慮過'HttpClient'嗎?爲什麼你想要更快的反應呢?它以什麼方式不足?你是否向同一主機發出併發請求? – Luaan