zoukankan      html  css  js  c++  java
  • (转)winform post 访问网站

           最近使用winform对webapi进行测试,搜集到园友的文章,记录下来供后续参考。

    第一篇文章,原文地址http://www.cnblogs.com/Johnny_Z/archive/2012/02/12/2348286.html

    代码
    using System.Net;
    using System.IO;
    
    
    //创建HttpWebRequest对象
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://192.168.0.1");//目标主机ip地址
    
    //模拟POST的数据
    string postData = string.Empty;
    postData += "user=" + "test1";
    postData += "&password=" + "123";
    Encoding utf8=Encoding.UTF8;
    byte[] data = utf8.GetBytes(postData);
    
    //设置请求头信息
    string cookieheader = string.Empty;
    CookieContainer cookieCon = new CookieContainer();
    request.Method = "POST";
    //设置cookie,若没有可以不设置
    request.CookieContainer = cookieCon;
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    Stream newStream = request.GetRequestStream();
    //把请求数据 写入请求流中
    newStream.Write(data, 0, data.Length);
    newStream.Close();
    
    
    //获得HttpWebResponse对象
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    Console.Write("Content length is {0}", response.ContentLength + "
    ");
    Console.Write("Content type is {0}", response.ContentType + "
    ");
    
    //获得响应流
    Stream receiveStream = response.GetResponseStream();
    StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
    //输入响应流信息
    Console.Write("Response stream received.
    ");
    Console.Write(readStream.ReadToEnd() + "
    ");
    
    response.Close();
    receiveStream.Close();
    readStream.Close();

    第二篇文章http://www.cnblogs.com/shanyou/archive/2012/03/21/2410739.html

    使用RestSharp 库消费Restful Service 中介绍了一个开源的Http Client库RestSharp。在ASP.NET MVC 4中也带来.NET框架中的Http Client。它提供了一个灵活的、可扩展的API来访问一切通过HTTP公开的RESTful服务。HttpClient是ASP.NET Web API 的一部分,直接包含在.NET 4.5中,也可以单独安装ASP.NET MVC4,可以通过Nuget包获取,包里面包含以下3部分:
    
    System.Net.Http: The main NuGet package providing the basic HttpClient and related classes
    System.Net.Http.Formatting: Adds support for serialization, deserialization as well as for many additional features building on top of System.Net.Http
    System.Json: Adds support for JsonVaue which is a mechanism for reading and manipulating JSON documents
    HttpClient是接收HttpResponseMessages和发送HttpRequestMessages的主要类,如果你习惯了使用WebClient或者是HttpWebRequest, 需要注意HttpClient和他们不同的地方:
    
    1、在HttpClient实例上配置扩展,设置默认的头部,取消未完成的请求和更多的设置。
    
    2、你通过一个单一的HttpClient实例,它有自己的连接池。
    
    3、HttpClients不与特定的HTTP服务器绑定,你可以使用相同的HttpClient实例提交任何HTTP请求。
    
    4、你可以用HttpClient为特定的站点创建特殊的Client
    
    5、HttpClient采用新的型模式处理异步请求使它更容易管理和协调更多的请求。
    
    下面我们看下具体的代码, MSDN code gallery 有个很详细Get操作的示例,这个示例是向World Bank Data Web API 发送一个Get请求,获取到Json格式的数据
    
    namespace WorldBankSample  
    {  
        /// <summary>  
        /// Sample download list of countries from the World Bank Data sources at http://data.worldbank.org/  
        /// </summary>  
        class Program  
        {  
            static string _address = "http://api.worldbank.org/countries?format=json";  
      
            static void Main(string[] args)  
            {  
                // Create an HttpClient instance  
                HttpClient client = new HttpClient();  
      
                // Send a request asynchronously continue when complete  
                client.GetAsync(_address).ContinueWith(  
                    (requestTask) =>  
                    {  
                        // Get HTTP response from completed task.  
                        HttpResponseMessage response = requestTask.Result;  
      
                        // Check that response was successful or throw exception  
                        response.EnsureSuccessStatusCode();  
      
                        // Read response asynchronously as JsonValue and write out top facts for each country  
                        response.Content.ReadAsAsync<JsonArray>().ContinueWith(  
                            (readTask) =>  
                            {  
                                Console.WriteLine("First 50 countries listed by The World Bank...");  
                                foreach (var country in readTask.Result[1])  
                                {  
                                    Console.WriteLine("   {0}, Country Code: {1}, Capital: {2}, Latitude: {3}, Longitude: {4}",  
                                        country.Value["name"],  
                                        country.Value["iso2Code"],  
                                        country.Value["capitalCity"],  
                                        country.Value["latitude"],  
                                        country.Value["longitude"]);  
                                }  
                            });  
                    });  
      
                Console.WriteLine("Hit ENTER to exit...");  
                Console.ReadLine();  
            }  
        }  
    }  
    下面介绍一个发送Post 请求的示例,示例代码使用默认创建的ASP.NET Web API模板项目:
    
    public class ValuesController : ApiController 
       { 
           // GET /api/values 
           public IEnumerable<string> Get() 
           { 
               return new string[] { "value1", "value2" }; 
           }
    
           // GET /api/values/5 
           public string Get(int id) 
           { 
               return "value"; 
           }
    
           // POST /api/values 
           public string Post(string value) 
           { 
               return value; 
           }
    
           // PUT /api/values/5 
           public void Put(int id, string value) 
           { 
           }
    
           // DELETE /api/values/5 
           public void Delete(int id) 
           { 
           } 
       }
    
    使用HttpClient示例的代码如下:
    
              string serviceAddress = "http://localhost:2650/api/values"; 
               HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceAddress); 
               request.Method = "POST"; 
               request.ContentType = "application/json"; 
               string strContent = @"{ ""value"": ""test""}" ; 
               using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream())) 
               { 
                   dataStream.Write(strContent); 
                   dataStream.Close(); 
               } 
               HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
               using (StreamReader dataStream = new StreamReader(response.GetResponseStream())) 
               { 
                   var result = dataStream.ReadToEnd(); 
                   Console.WriteLine(result); 
               }
    
                Uri serviceReq = new Uri(serviceAddress); 
                HttpClient client = new HttpClient(); 
                HttpContent content = new StringContent(@"{ ""value"": ""test""}"); 
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    
                // Send a request asynchronously continue when complete 
                client.PostAsync(serviceReq, content).ContinueWith( 
                    (requestTask) => 
                    { 
                        // Get HTTP response from completed task. 
                        HttpResponseMessage response = requestTask.Result;
    
                        // Check that response was successful or throw exception 
                        response.EnsureSuccessStatusCode();
    
                        // Read response asynchronously as JsonValue and write out top facts for each country 
                        response.Content.ReadAsAsync<string>().ContinueWith( 
                            (readTask) => 
                            { 
                                Console.WriteLine(readTask.Result);
    
                            }); 
                    });
    
    上面代码首先是创建一个HttpClient实例,设置要Post的数据的格式,然后调用HttpClient的异步请求,获取到的是一个HttpResponseMessage实例,可以在这个实例中检查请求的状态,调用的是一个扩展方法EnsureSuccessStatusCode,如果不是HttpStatusCode.OK,就会抛出一个异常。通过HttpResponseMessage的Content属性获取HttpContent,HttpContent有一些方法辅助处理接收的内容。
    
    对应于使用HttpWebRequest的示例如下:
    
              string serviceAddress = "http://localhost:2650/api/values"; 
               HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceAddress); 
               request.Method = "POST"; 
               request.ContentType = "application/json"; 
               string strContent = @"{ ""value"": ""test""}" ; 
               using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream())) 
               { 
                   dataStream.Write(strContent); 
                   dataStream.Close(); 
               } 
               HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
               using (StreamReader dataStream = new StreamReader(response.GetResponseStream())) 
               { 
                   var result = dataStream.ReadToEnd(); 
                   Console.WriteLine(result); 
               }

     第三篇文章,模拟post登录http://www.cnblogs.com/shanyou/archive/2012/03/21/2410739.html

  • 相关阅读:
    CF1132G
    CF1129B
    CF1131G
    CF1109D
    CF1110H
    CF1106F
    my.cnf 配置
    mysql 导入导出
    mysql 批量删除表数据
    国内开源镜像站
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/5063937.html
Copyright © 2011-2022 走看看