2016-11-23 4 views
0

Привет, я пытаюсь отправить страницу входа в систему, используя класс tcpclient. но это говорит о ошибке 302. То же самое, что я могу сделать с помощью webclient. пожалуйста, укажите, где я что-то не хватает. Я уже добился использования класса webclient. но я попросил сделать это на более низком уровне. пожалуйста, предложите.http сообщение с использованием tcpclient в C# не работает

я попробовал следующее

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

'Обновление-Небезопасность-Запросы: 1' может заставить сервер отправить перенаправление 302 на URL-адрес HTTPS, попробуйте удалить его. Трудно видеть случай для этого на уровне сокета, одна из инфраструктур, построенных в HTTP-клиентах, является лучшим выбором. –

ответ

0

302 не является ошибкой. Это запрос перенаправления - форма говорит вам «идите туда вместо», скорее всего, в результате вашей попытки входа в систему. WebClient обрабатывает перенаправление, ваш клиент этого не делает.

Существует много HTTP для реализации. Если это не просто упражнение, не пытайтесь написать свой собственный HTTP-клиент. Перенаправление - это только вершина айсберга.

+0

есть способ достичь .. Я хочу увидеть зарегистрированную страницу после отправки. –

+0

Я хочу использовать низкий уровень, чтобы быстрее реагировать. –

+0

@marcskumar Вы думаете, что собираетесь сделать лучшую работу, чем разработчики .NET BCL? Зачем? Планируете ли вы пропустить некоторые части процесса, потому что они не нужны для вашего случая использования, или вы просто предполагаете, что «нижний уровень» означает «быстрее»? 'WebClient' даже не использует' TcpClient'. Собираетесь ли вы реализовать свой собственный пул соединений? Кэширование? Вы считали «HttpClient»? И почему вы хотите, чтобы ответ был быстрым? Каким образом он неадекватен? Вы выполняете параллельные запросы на один и тот же хост? – Luaan