2015-06-06 2 views
0

Я хочу отправить запрос GET/POST с сокетами, и у меня есть этот код:Как отправить запрос GET с помощью сокетов?

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
socket.Connect(Url, 80); 
byte[] contentLenght = Encoding.ASCII.GetBytes(Data); 
string[] masRequestString ={ 
    "GET /"+Data+" HTTP/1.1\r\n" , 
    "Host: "+Url+"\r\n", 
    "User-Agent: "+textBox1.Text+"\r\n", 
    "Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n", 
    "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n", 
    "Referer: "+textBox2.Text+"\r\n"}; 
string request = string.Concat(masRequestString); 
Byte[] bytesSent = Encoding.ASCII.GetBytes(request); 
socket.Send(bytesSent, bytesSent.Length, 0); 
Byte[] bytesReceived = new Byte[0x400]; 
int bytes = socket.Receive(bytesReceived, bytesReceived.Length, 0); 
string content = Encoding.ASCII.GetString(bytesReceived, 0, bytes); 

Когда я пытаюсь отправить запрос снифер не вижу его. Зачем?

ответ

4

Я не имею ни малейшего представления о том, как вы нюхать, но

  • Вы находитесь не посылает правильный запрос, потому что он пропускает \r\n в конце.
  • Ожидается, что сервер завершит соединение после завершения ответа. Вместо этого вам нужно заботиться о заголовке content-length и закодированном кодировании.
  • И кроме того, что отправка заголовка Content-type с запросом GET бессмысленна, поскольку контент не будет отправлен внутри запроса GET (только в ответе).

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

0

Не пытайтесь реализовать HTTP самостоятельно, сокет может принимать ваши данные и обертывать их. Использование HTTP библиотека:

using System.Net; 

string url = "https://www.example.com/scriptname.php?var1=hello"; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Stream resStream = response.GetResponseStream();