2016-11-23 8 views
0

こんにちは、私はtcpclientクラスを使用してログインページに投稿しようとしています。 302エラーと表示されます。私はwebclientを使って同じことをすることができます。私は何かが不足している場所を提案してください。 私はすでにwebclientクラスの使用を達成しています。しかし、私はより低いレベルで行うように求めました。提案してください。http postは、c#でtcpclientを使用していません

iが

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'は、サーバーがHTTPS URLに302リダイレクトを送信して、それを削除しようとする可能性があります。これをソケットレベルで行うのは難しいですが、HTTPクライアントに組み込まれているフレームワークのほうが良い選択です。 –

答えて

0

302がエラーではない以下試みました。それはリダイレクトの要求です。フォームはあなたのログイン試行の結果として "代わりに行く"ことを伝えます。 WebClientはリダイレクトを処理しますが、クライアントはリダイレクトしません。

実装するHTTPはたくさんあります。純粋にエクササイズでない限り、独自のHTTPクライアントを作成しないでください。リダイレクションはちょうど氷山の先頭です。

+0

達成するための方法です..私はサブミット後にページにログインして見たいです。 –

+0

私は応答を速くするために低レベルを使いたいです。 –

+0

@marcskumarあなたは.NET BCLの開発者よりも優れた仕事をするつもりだと思いますか?どうして?あなたのユースケースでは不要なため、プロセスのいくつかの部分をスキップする予定ですか?それとも、「低レベル」が「高速」を意味すると想定していますか? 'WebClient'は' TcpClient'を使用しません。独自の接続プーリングを実装しようとしていますか?キャッシング?あなたは 'HttpClient'を考えましたか?とにかく、なぜ応答を速くしたいのですか?それはどのように不十分ですか?あなたは同じホストに同時リクエストをしていますか? – Luaan

関連する問題