C#socketに基づいてhttpリクエストをシミュレートする方法

3614 ワード

この例では、C#がsocketに基づいてhttpリクエストをシミュレートする方法について説明します.皆さんの参考にしてください.具体的な実現方法は以下の通りである.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
class HttpHelper
{
  #region  socket 
  private static Socket ConnectSocket(string server, int port)
  {
   Socket s = null;
   IPHostEntry hostEntry = null;
   // Get host related information.
   hostEntry = Dns.GetHostEntry(server);
   // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
   // an exception that occurs when the host IP Address is not compatible with the address family
   // (typical in the IPv6 case).
   foreach (IPAddress address in hostEntry.AddressList)
   {
    IPEndPoint ipe = new IPEndPoint(address, port);
    Socket tempSocket =
    new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    tempSocket.Connect(ipe);
    if (tempSocket.Connected)
    {
     s = tempSocket;
     break;
    }
    else
    {
     continue;
    }
   }
   return s;
  }
  #endregion
  #region   request  http , ,server ip ,port http 80
  public static string SocketSendReceive(string request, string server, int port)
  {
   try
   {
    Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
    Byte[] bytesReceived = new Byte[655350];
    //  
    Socket s = ConnectSocket(server, port);
    if (s == null)
     return ("Connection failed");
    //  .
    s.Send(bytesSent, bytesSent.Length, 0);
    // Receive the server home page content.
    int bytes = 0;
    string page = "Default HTML page on " + server + ":\r
"; // . do { bytes = s.Receive(bytesReceived, bytesReceived.Length, 0); page = page + Encoding.UTF8.GetString(bytesReceived, 0, bytes); } while (bytes > 0); return page; } catch { return string.Empty; } } #endregion }

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
class Program
{
  public static string HeadlerInit() {
   StringBuilder sb = new StringBuilder();
   sb.AppendLine("GET http://www.baidu.com/ HTTP/1.1");
   sb.AppendLine("Host: www.baidu.com");
   sb.AppendLine("Connection: keep-alive");
   sb.AppendLine("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
   sb.AppendLine("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36");
   sb.AppendLine("Accept-Encoding:deflate, sdch");
   sb.AppendLine("Accept-Language: zh-CN,zh;q=0.8");
   sb.AppendLine("\r
"); // return sb.ToString(); } static void Main(string[] args) { string getStrs=HeadlerInit(); string getHtml = HttpHelper.SocketSendReceive(getStrs, "www.baidu.com", 80); Console.WriteLine(getHtml); } }

本稿で述べたことが皆さんのC#プログラム設計に役立つことを願っています.