使用HttpWebRequest发送模拟POST请求

合集下载

C# WebRequest发起Http Post请求模拟登陆并cookie处理示例

C# WebRequest发起Http Post请求模拟登陆并cookie处理示例

C# WebRequest发起Http Post请求模拟登陆并cookie 处理示例CookieContainer cc=new CookieContainer();string url = “/xmweb”;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = “POST”;request.ContentType = “application/x-www-form-urlencoded”; request.CookieContainer=cc;string user=”user”; //用户名string pass=”pass”; //密码string data = “func=login&usr=” + HttpUtility.UrlEncode(user) + “&sel_domain=&domain=&pass=” +HttpUtility.UrlEncode(pass) +“&image2.x=0&image2.y=0&verifypcookie=&verifypip=”;request.ContentLength = data.Length;StreamWriter writer = newStreamWriter(request.GetRequestStream(),Encoding.ASCII);writer.Write(data);writer.Flush();HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string encoding = response.ContentEncoding;if (encoding == null || encoding.Length < 1) {encoding = "UTF-8"; //默认编码}StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));data = reader.ReadToEnd();Console.WriteLine(data);response.Close();int index=data.IndexOf("sid=");string sid=data.Substring(index+4,data.IndexOf("&",index)-index-4); Console.WriteLine(sid);url ="/xmweb?func=mlst&act=show&usr="+user+"&sid="+sid+ "&fid=1&desc=1&pg=1&searchword=&searchtype=&searchsub=&searchfd=&sort =4";request = (HttpWebRequest)WebRequest.Create(url);request.CookieContainer = cc;foreach(Cookie cookie in response.Cookies) {cc.Add(cookie);}response = (HttpWebResponse)request.GetResponse();encoding = response.ContentEncoding;if (encoding == null || encoding.Length < 1) {encoding = "UTF-8"; //默认编码}reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));data = reader.ReadToEnd();Console.WriteLine(data);response.Close();这段代码的意思是,模拟登陆263邮箱,别列出收件箱内容(html代码)Related posts:1.C# WebRequest处理Https请求2.C# WebRequest处理Https请求之使用客户端证书。

C#通过WebClient,HttpWebRequest实现http的post和get方法

C#通过WebClient,HttpWebRequest实现http的post和get方法

//body是要传递的参数,格式"roleId=1&uid=2"//post的cotentType填写://"application/x-www-form-urlencoded"//soap填写:"text/xml; charset=utf-8"public static string PostHttp(string url, string body, string contentType){HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);httpWebRequest.ContentType = contentType;httpWebRequest.Method = "POST";httpWebRequest.Timeout = 20000;byte[] btBodys = Encoding.UTF8.GetBytes(body);httpWebRequest.ContentLength = btBodys.Length;httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());string responseContent = streamReader.ReadToEnd();httpWebResponse.Close();streamReader.Close();httpWebRequest.Abort();httpWebResponse.Close();return responseContent;}POST方法(httpWebRequest)/// <summary>/// 通过WebClient类Post数据到远程地址,需要Basic认证;/// 调用端自己处理异常/// </summary>/// <param name="uri"></param>/// <param name="paramStr">name=张三&age=20</param>/// <param name="encoding">请先确认目标网页的编码方式</param>/// <param name="username"></param>/// <param name="password"></param>/// <returns></returns>public static string Request_WebClient(string uri, string paramStr, Encoding encoding, string username, string password){if (encoding == null)encoding = Encoding.UTF8;string result = string.Empty;WebClient wc = new WebClient();// 采取POST方式必须加的Headerwc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");byte[] postData = encoding.GetBytes(paramStr);if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)){wc.Credentials = GetCredentialCache(uri, username, password);wc.Headers.Add("Authorization", GetAuthorization(username, password));}byte[] responseData = wc.UploadData(uri, "POST", postData); // 得到返回字符流return encoding.GetString(responseData);// 解码}POST方法(WebClient)public static string GetHttp(string url, HttpContext httpContext){string queryString = "?";foreach (string key in httpContext.Request.QueryString.AllKeys){queryString += key + "=" + httpContext.Request.QueryString[key] + "&";}queryString = queryString.Substring(0, queryString.Length - 1);HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url + queryString);httpWebRequest.ContentType = "application/json";httpWebRequest.Method = "GET";httpWebRequest.Timeout = 20000;//byte[] btBodys = Encoding.UTF8.GetBytes(body);//httpWebRequest.ContentLength = btBodys.Length;//httpWebRequest.GetRequestStream().Write(btBodys, 0, btBodys.Length);HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());string responseContent = streamReader.ReadToEnd();httpWebResponse.Close();streamReader.Close();return responseContent;}Get方法(HttpWebRequest)/// <summary>/// 通过WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;/// 调用端自己处理异常/// </summary>/// <param name="uri"></param>/// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>/// <param name="encoding">如果不知道具体的编码,传入null</param>/// <param name="username"></param>/// <param name="password"></param>/// <returns></returns>public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password){string result = string.Empty;WebRequest request = WebRequest.Create(new Uri(uri));if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)){request.Credentials = GetCredentialCache(uri, username, password);request.Headers.Add("Authorization", GetAuthorization(username, password));}if (timeout > 0)request.Timeout = timeout;WebResponse response = request.GetResponse();Stream stream = response.GetResponseStream();StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);result = sr.ReadToEnd();sr.Close();stream.Close();return result;}#region # 生成Http Basic 访问凭证#private static CredentialCache GetCredentialCache(string uri, string username, string password){string authorization = string.Format("{0}:{1}", username, password);CredentialCache credCache = new CredentialCache();credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));return credCache;}private static string GetAuthorization(string username, string password){string authorization = string.Format("{0}:{1}", username, password);return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));}#endregionbasic验证的WebRequest/WebResponse。

C#模拟http发送post或get请求

C#模拟http发送post或get请求

C#模拟http发送post或get请求转⾃:1private string HttpPost(string Url, string postDataStr)2 {3 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);4 request.Method = "POST";5 request.ContentType = "application/x-www-form-urlencoded";6 request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);7 request.CookieContainer = cookie;8 Stream myRequestStream = request.GetRequestStream();9 StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));10 myStreamWriter.Write(postDataStr);11 myStreamWriter.Close();1213 HttpWebResponse response = (HttpWebResponse)request.GetResponse();1415 response.Cookies = cookie.GetCookies(response.ResponseUri);16 Stream myResponseStream = response.GetResponseStream();17 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));18string retString = myStreamReader.ReadToEnd();19 myStreamReader.Close();20 myResponseStream.Close();2122return retString;23 }2425public string HttpGet(string Url, string postDataStr)26 {27 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);28 request.Method = "GET";29 request.ContentType = "text/html;charset=UTF-8";3031 HttpWebResponse response = (HttpWebResponse)request.GetResponse();32 Stream myResponseStream = response.GetResponseStream();33 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));34string retString = myStreamReader.ReadToEnd();35 myStreamReader.Close();36 myResponseStream.Close();3738return retString;39 }在post的时候有时也⽤的到cookie,像登录163发邮件时候就需要发送cookie,所以在外部⼀个cookie属性随时保存 CookieContainer cookie = new CookieContainer();!注意:有时候请求会重定向,但我们就需要从重定向url获取东西,像QQ登录成功后获取sid,但上⾯的会⾃动根据重定向地址跳转。

request post方法

request post方法

一、介绍Request POST方法的概念和作用Request POST方法是HTTP协议中用于向服务器发送数据的一种方法。

它的作用是向服务器提交数据,比如表单中的用户输入信息,然后服务器进行处理并返回相应结果。

在web开发中,使用Request POST方法能够实现用户注册、登入、提交订单等功能。

二、 Request POST方法的基本语法Request POST方法的基本语法如下:```HTTPPOST /url HTTP/1.1Host: exampleContent-Type: application/x-form-urlencodedContent-Length: 25username=johndoepassword=1234```上面的例子中,`POST`表示使用POST方法,`/url`表示请求的位置区域,`Host`是指请求的主机名,`Content-Type`用来指定请求体的类型,`Content-Length`表示请求体的长度,最后一行是实际的请求数据。

三、 Request POST方法的使用场景1. 用户注册当用户在注册页面填写完个人信息后,点击提交按钮时,客户端通过Request POST方法将用户输入的信息提交给服务器进行注册。

2. 用户登入用户在登入页面输入用户名和密码后,客户端通过Request POST方法将登入信息发送给服务器进行验证。

3. 数据提交在购物全球信息站上,用户选择商品后点击提交订单按钮,客户端通过Request POST方法将订单信息发送给服务器。

四、 Request POST方法与GET方法的区别Request POST方法和Request GET方法是HTTP协议中最常用的两种方法,它们在发送数据时有以下区别:1. 数据位置使用Request POST方法时,数据是放在请求体中发送的,而使用Request GET方法时,数据是放在URL中发送的,因此GET方法的数据会被暴露在URL中,不适合发送敏感信息。

post请求wcf服务方法

post请求wcf服务方法

post请求wcf服务方法POST请求WCF服务方法介绍在使用WCF(Windows Communication Foundation)开发服务时,我们常常需要使用POST请求来调用服务方法。

本文将详细介绍如何使用POST请求来调用WCF服务方法的各种方法。

方法一:使用HttpClient类1.首先,我们需要在项目中引入命名空间。

2.使用HttpClient类发送POST请求,示例代码如下:using ;// 创建HttpClient对象HttpClient client = new HttpClient();// 设置请求地址string url = "// 设置请求内容string content = "your-request-content";// 发送POST请求HttpResponseMessage response = await (url, new StringCon tent(content));// 处理响应结果string result = await ();方法二:使用WebRequest类1.首先,我们需要在项目中引入命名空间。

2.使用WebRequest类发送POST请求,示例代码如下:using ;// 创建WebRequest对象WebRequest request = ("// 设置请求方法为POST= "POST";// 设置请求内容string content = "your-request-content";byte[] byteArray = (content);// 设置请求参数= ;// 发送请求using (Stream dataStream = ()){(byteArray, 0, );}// 获取响应WebResponse response = ();string result;using (Stream responseStream = ()){using (StreamReader reader = new StreamReader(respon seStream)){result = ();}}方法三:使用RestSharp库1.首先,我们需要在项目中引入RestSharp库(可通过NuGet安装)。

C#HttpWebRequest传递参数多种方式混合使用

C#HttpWebRequest传递参数多种方式混合使用

C#HttpWebRequest传递参数多种⽅式混合使⽤在做CS调⽤第三⽅接⼝的时候遇到了这样的⼀个问题,通过PSOTman调试需要分别在parmas、Headers、Body⾥⾯同时传递参数。

在⽹上查询了很多资料,以此来记录⼀下开发脱坑历程。

POSTman调试界⾯:params参数POSTman调试界⾯:Headers参数POSTman调试界⾯:Body参数在postman调试⾥⾯可以这么传递参数,那么在后台调⽤的时候我们改如何写呢。

经过查阅资料得知。

params参数可以直接跟在请求的URL地址后⾯,Headers参数通过request.Headers.Add()⽅法添加,Body⾥⾯需要传递的格式为JSON直接通过JsonConvert.SerializeObject()将对象序列化,将request.ContentType = "application/json",特别注意的是ContentType不能通过request.Headers.Add()⽅法添加。

public static string getReportsContent(string param, string url, string RandomCode, string Authorization){byte[] bytes = null;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);//获取请求的⽅式request.Method = "post";request.ContentType = "application/json";request.Headers.Add("RandomCode", RandomCode);request.Headers.Add("Authorization", Authorization);bytes = Encoding.UTF8.GetBytes(param);request.ContentLength = bytes.Length;Stream strStream = request.GetRequestStream();strStream.Write(bytes, 0, bytes.Length);strStream.Close();//获取设置⾝份认证及请求超时时间SetWebRequest(request);//就收应答HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();Stream strStream1 = null;strStream1 = httpResponse.GetResponseStream();string responseContent = new StreamReader(strStream1, Encoding.UTF8).ReadToEnd();return responseContent;}获取设置⾝份认证及请求超时时间private static void SetWebRequest(HttpWebRequest request){request.Credentials = CredentialCache.DefaultCredentials;request.Timeout = 1000000;}。

html页面模拟post和get的例子代码

html页面模拟post和get的例子代码

HTML页面模拟POST和GET的例子代码随着互联网的快速发展,Web开发变得日益重要,而HTML作为Web页面的基础语言,对于学习Web开发的初学者来说是一个必备的知识点。

在Web开发中,POST和GET是两种常用的HTTP请求方法,用于向服务器传递数据。

在本文中,我们将介绍如何使用HTML页面模拟POST和GET的例子代码。

第一部分:模拟GET请求GET请求用于从服务器获取数据,通常通过URL参数传递数据。

以下是一个简单的HTML页面,用于模拟GET请求:1. 创建一个HTML表单```html<html><body><form action="get_example.php" method="get"><label for="name">Name:</label><input type="text" id="name" name="name"><br><br> <label for="em本人l">Em本人l:</label><input type="text" id="em本人l" name="em本人l"><br><br><input type="submit" value="Submit"></form></body></html>```2. 创建一个服务器端页面get_example.php,用于接收GET请求并处理数据```php<?php$name = $_GET['name'];$em本人l = $_GET['em本人l'];echo "Name: $name <br>";echo "Em本人l: $em本人l";>```当用户在表单中填写尊称和电流信箱并提交表单时,数据将以URL参数的形式传递到get_example.php页面,get_example.php页面接收到数据后将尊称和电流信箱打印出来。

在使用HttpWebRequestPost数据时候返回400错误

在使用HttpWebRequestPost数据时候返回400错误

在使⽤HttpWebRequestPost数据时候返回400错误笔者有⼀个项⽬中⽤到了上传zip并解压的功能。

开始觉得很简单,因为之前曾经做过之类的上传⽂件的功能,所以并不为意,于是使⽤copy⼤法。

正如你所料,如果⼀切很正常的能运⾏的话就不会有这篇笔记了。

整个系统跑起来以后,在本地开发环境中测试,顺利执⾏。

测试环境中,顺利执⾏。

随着项⽬的推进,上线。

这个功能在前期本⾝是不重要的,不过当你没有服务器权限的时候,有⼀个可以随意上传⽂件的功能还是很不错的,再也不⽤写邮件,等待,等待,等待,⽽是可以很快看到修改结果,这样想想还是令⼈⼩激动的。

so? 出来什么问题呢?在⼀套模板制作完毕并上传的时候,问题来了,这是jquery 中弹出的错误⿁能看的懂。

于是本地调整了接⼝,指向到本地的api,让api项⽬进⼊调试状态,再次上传⽂件。

在费了n多调整步骤之后,抓到了错误:远程服务器返回错误:(400)错误的请求这是什么⿁??从来没见过呀!怎么没有错误提⽰呢??偶买噶!当时笔者的内芯是奔溃的。

⽴马百度,还真有好多⼈遇到这个问题,看了n多⽅案后还是跟我的情况不像。

不⾏,那就分析吧。

笔者的程序中有这个⼀个函数1///<summary>2///发起httpPost 请求,可以上传⽂件3///</summary>4///<param name="url">请求的地址</param>5///<param name="files">⽂件</param>6///<param name="input">表单数据</param>7///<param name="endoding">编码</param>8///<returns></returns>9public static string PostResponse(string url, UpLoadFile[] files, Dictionary<string, string> input, Encoding endoding)10 {1112string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");13 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);14 request.ContentType = "multipart/form-data; boundary=" + boundary;15 request.Method = "POST";16 request.KeepAlive = true;17//request.Credentials = CredentialCache.DefaultCredentials;18 request.Expect = "";1920 MemoryStream stream = new MemoryStream();212223byte[] line = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");24byte[] enterER = Encoding.ASCII.GetBytes("\r\n");25////提交⽂件26if (files != null)27 {28string fformat = "Content-Disposition:form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type:{2}\r\n\r\n";29foreach (UpLoadFile file in files)30 {3132 stream.Write(line, 0, line.Length); //项⽬分隔符33string s = string.Format(fformat, , file.FileName, file.Content_Type);34byte[] data = Encoding.UTF8.GetBytes(s);35 stream.Write(data, 0, data.Length);36 stream.Write(file.Data, 0, file.Data.Length);37 stream.Write(enterER, 0, enterER.Length); //添加\r\n38 }39 }404142//提交⽂本字段43if (input != null)44 {45string format = "--" + boundary + "\r\nContent-Disposition:form-data;name=\"{0}\"\r\n\r\n{1}\r\n"; //⾃带项⽬分隔符46foreach (string key in input.Keys)47 {48string s = string.Format(format, key, input[key]);49byte[] data = Encoding.UTF8.GetBytes(s);50 stream.Write(data, 0, data.Length);51 }5253 }5455byte[] foot_data = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); //项⽬最后的分隔符字符串需要带上--56 stream.Write(foot_data, 0, foot_data.Length);57585960 request.ContentLength = stream.Length;61 Stream requestStream = request.GetRequestStream(); //写⼊请求数据62 stream.Position = 0L;63 stream.CopyTo(requestStream); //64 stream.Close();6566 requestStream.Close();67686970try71 {727374 HttpWebResponse response;75try76 {77 response = (HttpWebResponse)request.GetResponse();7879try80 {81using (var responseStream = response.GetResponseStream())82using (var mstream = new MemoryStream())83 {84 responseStream.CopyTo(mstream);85string message = endoding.GetString(mstream.ToArray());86return message;87 }88 }89catch (Exception ex)90 {91throw ex;92 }93 }94catch (WebException ex)95 {96//response = (HttpWebResponse)ex.Response;979899//if (response.StatusCode == HttpStatusCode.BadRequest)100//{101// using (Stream data = response.GetResponseStream())102// {103// using (StreamReader reader = new StreamReader(data))104// {105// string text = reader.ReadToEnd();106// Console.WriteLine(text);107// }108// }109//}110111throw ex;112 }113114115 }116catch (Exception ex)117 {118throw ex;119 }120 }当然这个函数是正确的,那个错误的已经被修改掉了。

C#(WINFORM)实现模拟POST发送请求登录网站

C#(WINFORM)实现模拟POST发送请求登录网站
newStream.Close();
}
else
{
req.ContentLength = 0;
}
StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved = { '?', '=', '&' };
byte[] SomeBytes = null;
//输出
this.webBrowser1.Document.Write(strResult);
C#(WINFORM)实现模拟POST发送请求登录网站
作者:不详 来源:整理 发布时间:2007-8-5 14:29:24 发布人:Polaris
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
res.Close();
}
}
return strResult;
}
/**//// <summary> 获取页面HTML
/// </summary>
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Headers["If-None-Match"] = "36d0ed736e88c71:d9f";
req.Referer = "http://website/login.do";

前端发送请求的几种方式

前端发送请求的几种方式

前端发送请求的几种方式前端开发中,发送请求是非常常见的操作。

通过发送请求,前端可以与后端进行数据交互,获取数据并展示给用户。

在实际开发中,有多种方式可以发送请求,本文将介绍其中的几种常用方式。

1. 使用XMLHttpRequest对象发送请求XMLHttpRequest是浏览器提供的原生对象,可以通过它发送HTTP 请求。

可以使用它发送GET、POST等各种类型的请求,并且可以设置请求头、发送数据等。

通过监听其事件,可以获取到请求的响应结果。

2. 使用Fetch API发送请求Fetch API是一种基于Promise的现代化的网络请求方案。

它提供了更加简洁的API来发送请求,并且支持更多的功能,如请求的中间件处理、请求的取消等。

通过使用Fetch API,可以更加便捷地发送和处理请求。

3. 使用Axios发送请求Axios是一个基于Promise的HTTP客户端库,可以在浏览器和Node.js中发送请求。

它提供了更加简洁的API来发送请求,并且支持拦截器、请求的取消、请求的并发处理等功能。

Axios还可以自动将响应数据转换为JSON格式,并提供了更加友好的错误处理机制。

4. 使用Ajax发送请求Ajax是Asynchronous JavaScript and XML的缩写,它是一种在不刷新整个页面的情况下与服务器交换数据的技术。

通过使用JavaScript 的XMLHttpRequest对象,可以异步地发送请求并获取响应结果。

Ajax可以发送各种类型的请求,并且可以通过回调函数来处理响应结果。

5. 使用WebSocket发送请求WebSocket是一种在单个TCP连接上进行全双工通信的协议。

与HTTP协议不同,WebSocket可以实现服务器主动向客户端推送数据。

通过使用WebSocket,前端可以与后端进行实时的双向通信,并且可以发送和接收任意类型的数据。

以上是前端发送请求的几种常用方式。

每种方式都有其特点和适用场景,开发者可以根据实际需求选择合适的方式来发送请求。

C#通过HttpWebRequest发送带有JSONBody的POST请求实现

C#通过HttpWebRequest发送带有JSONBody的POST请求实现

C#通过HttpWebRequest发送带有JSONBody的POST请求实现⽬录起因原来的处理⽅式新的⽅式起因很多博客都有描述到这个问题,那么为什么我还要写⼀篇⽂章来说⼀下呢,因为其他的都似乎已经过时了,会导致其实body 并没有发送过去。

⾄于为什么不使⽤其他的诸如 HttpClient 之类的,是由于业务需要。

原来的处理⽅式通过 GetRequestStream 来获取请求流,后把需要发送的 Json 数据写⼊到流中private T PostDataViaHttpWebRequest<T>(string baseUrl,IReadOnlyDictionary<string, string> headers,IReadOnlyDictionary<string, string> urlParas,string requestBody=null){var resuleJson = string.Empty;try{var apiUrl = baseUrl;if (urlParas != null)urlParas.ForEach(p =>{if (apiUrl.IndexOf("{" + p.Key + "}") > -1){apiUrl = apiUrl.Replace("{" + p.Key + "}", p.Value);}else{apiUrl += string.Format("{0}{1}={2}", apiUrl.Contains("?") ? "&" : "?", p.Key, p.Value);}});var req = (HttpWebRequest)WebRequest.Create(apiUrl);req.Method = "POST";req.ContentType = "application/json";req.ContentLength = 0;if (!requestBody.IsNullOrEmpty()){using (var postStream = req.GetRequestStream()){var postData = Encoding.ASCII.GetBytes(requestBody);req.ContentLength = postData.Length;postStream.Write(postData, 0, postData.Length);}}if (headers != null){if (headers.Keys.Any(p => p.ToLower() == "content-type"))req.ContentType = headers.SingleOrDefault(p => p.Key.ToLower() == "content-type").Value;if (headers.Keys.Any(p => p.ToLower() == "accept"))req.Accept = headers.SingleOrDefault(p => p.Key.ToLower() == "accept").Value;}var response = (HttpWebResponse)req.GetResponse();using(Stream stream = response.GetResponseStream()){using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("UTF-8"))){resuleJson = reader.ReadToEnd();}}}catch (Exception ex){return default(T);}return JsonConvert.DeserializeObject<T>(resuleJson);}但是会发现,数据⼀直没有正常发送过去,⽽且代码还显得⽐较复杂新的⽅式这⾥修改⼀下写⼊ RequestStream 的⽅式,使⽤ StreamWriter 包装⼀下,然后直接写⼊需要发送的 Json 数据private T PostDataViaHttpWebRequest<T>(string baseUrl,IReadOnlyDictionary<string, string> headers,IReadOnlyDictionary<string, string> urlParas,string requestBody=null){var resuleJson = string.Empty;try{var apiUrl = baseUrl;if (urlParas != null)urlParas.ForEach(p =>{if (apiUrl.IndexOf("{" + p.Key + "}") > -1){apiUrl = apiUrl.Replace("{" + p.Key + "}", p.Value);}else{apiUrl += string.Format("{0}{1}={2}", apiUrl.Contains("?") ? "&" : "?", p.Key, p.Value);}});var req = (HttpWebRequest)WebRequest.Create(apiUrl);req.Method = "POST";req.ContentType = "application/json"; //Defaltif (!requestBody.IsNullOrEmpty()){using (var postStream = new StreamWriter(req.GetRequestStream())){postStream.Write(requestBody);}}if (headers != null){if (headers.Keys.Any(p => p.ToLower() == "content-type"))req.ContentType = headers.SingleOrDefault(p => p.Key.ToLower() == "content-type").Value;if (headers.Keys.Any(p => p.ToLower() == "accept"))req.Accept = headers.SingleOrDefault(p => p.Key.ToLower() == "accept").Value;}var response = (HttpWebResponse)req.GetResponse();using(Stream stream = response.GetResponseStream()){using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("UTF-8"))){resuleJson = reader.ReadToEnd();}}}catch (Exception ex){return default(T);}return JsonConvert.DeserializeObject<T>(resuleJson);}这样即可正确发送 Json 数据。

C#模拟HTTPPOST请求

C#模拟HTTPPOST请求

C#模拟HTTPPOST请求/// <summary>/// ⽤于以 POST ⽅式向⽬标地址提交表达数据/// 使⽤ application/x-www-form-urlencoded 编码⽅式/// 不⽀持上传⽂件, 若上传⽂件, 请使⽤<see cref="HttpPostFileRequestClient"/>/// </summary>public sealed class HttpPostRequestClient{#region - Private -private List<KeyValuePair<string, string>> _postDatas;#endregion/// <summary>/// 获取或设置数据字符编码, 默认使⽤<see cref="System.Text.Encoding.UTF8"/>/// </summary>public Encoding Encoding { get; set; } = Encoding.UTF8;/// <summary>/// 获取或设置 UserAgent/// </summary>public string UserAgent { get; set; } = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"; /// <summary>/// 获取或设置 Accept/// </summary>public string Accept { get; set; } = "*/*";/// <summary>/// 获取或设置 Referer/// </summary>public string Referer { get; set; }/// <summary>/// 获取或设置 Cookie 容器/// </summary>public CookieContainer CookieContainer { get; set; } = new CookieContainer();/// <summary>/// 初始化⼀个⽤于以 POST ⽅式向⽬标地址提交不包含⽂件表单数据<see cref="HttpPostRequestClient"/>实例/// </summary>public HttpPostRequestClient(){this._postDatas = new List<KeyValuePair<string, string>>();}/// <summary>/// 设置表单数据字段, ⽤于存放⽂本类型数据/// </summary>/// <param name="fieldName">指定的字段名称</param>/// <param name="fieldValue">指定的字段值</param>public void SetField(string fieldName, string fieldValue){this._postDatas.Add(new KeyValuePair<string, string>(fieldName, fieldValue));}/// <summary>/// 以POST⽅式向⽬标地址提交表单数据/// </summary>/// <param name="url">⽬标地址, http(s)://</param>/// <returns>⽬标地址的响应</returns>public HttpWebResponse Post(string url){if (string.IsNullOrWhiteSpace(url))throw new ArgumentNullException(nameof(url));HttpWebRequest request = null;if (url.ToLowerInvariant().StartsWith("https")){request = WebRequest.Create(url) as HttpWebRequest;ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((s, c, ch, ss) => { return true; });request.ProtocolVersion = HttpVersion.Version11;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;request.KeepAlive = true;ServicePointManager.CheckCertificateRevocationList = true; ServicePointManager.DefaultConnectionLimit = 100;ServicePointManager.Expect100Continue = false;}else{request = WebRequest.Create(url) as HttpWebRequest;}request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";erAgent = erAgent;request.Accept = this.Accept;request.Referer = this.Referer;request.CookieContainer = this.CookieContainer;var postData = string.Join("&", this._postDatas.Select(p => $"{p.Key}={p.Value}"));using(var requestStream = request.GetRequestStream()){var bytes = this.Encoding.GetBytes(postData);requestStream.Write(bytes, 0, bytes.Length);}return request.GetResponse() as HttpWebResponse;}/// <summary>/// 以POST⽅式向⽬标地址提交表单数据/// </summary>/// <param name="url">⽬标地址, http(s)://</param>/// <returns>⽬标地址的响应</returns>public async Task<HttpWebResponse> PostAsync(string url){if (string.IsNullOrWhiteSpace(url))throw new ArgumentNullException(nameof(url));HttpWebRequest request = null;if (url.ToLowerInvariant().StartsWith("https")){request = WebRequest.Create(url) as HttpWebRequest;ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((s, c, ch, ss) => { return true; });request.ProtocolVersion = HttpVersion.Version11;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;request.KeepAlive = true;ServicePointManager.CheckCertificateRevocationList = true; ServicePointManager.DefaultConnectionLimit = 100;ServicePointManager.Expect100Continue = false;}else{request = WebRequest.Create(url) as HttpWebRequest;}request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";erAgent = erAgent;request.Accept = this.Accept;request.Referer = this.Referer;request.CookieContainer = this.CookieContainer;var postData = string.Join("&", this._postDatas.Select(p => $"{p.Key}={p.Value}"));using (var requestStream = await request.GetRequestStreamAsync()){var bytes = this.Encoding.GetBytes(postData);requestStream.Write(bytes, 0, bytes.Length);}return await request.GetResponseAsync() as HttpWebResponse;}}/// <summary>/// ⽤于以 POST ⽅式向⽬标地址提交表单数据, 仅适⽤于包含⽂件的请求/// </summary>public sealed class HttpPostFileRequestClient{#region - Private -private string _boundary;private List<byte[]> _postDatas;#endregion/// <summary>/// 获取或设置数据字符编码, 默认使⽤<see cref="System.Text.Encoding.UTF8"/>/// </summary>public Encoding Encoding { get; set; } = Encoding.UTF8;/// <summary>/// 获取或设置 UserAgent/// </summary>public string UserAgent { get; set; } = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"; /// <summary>/// 获取或设置 Accept/// </summary>public string Accept { get; set; } = "*/*";/// <summary>/// 获取或设置 Referer/// </summary>public string Referer { get; set; }/// <summary>/// 获取或设置 Cookie 容器/// </summary>public CookieContainer CookieContainer { get; set; } = new CookieContainer();/// <summary>/// 初始化⼀个⽤于以 POST ⽅式向⽬标地址提交表单数据的<see cref="HttpPostFileRequestClient"/>实例 /// </summary>public HttpPostFileRequestClient(){this._boundary = DateTime.Now.Ticks.ToString("X");this._postDatas = new List<byte[]>();}/// <summary>/// 设置表单数据字段, ⽤于存放⽂本类型数据/// </summary>/// <param name="fieldName">指定的字段名称</param>/// <param name="fieldValue">指定的字段值</param>public void SetField(string fieldName, string fieldValue){var field = $"--{this._boundary}\r\n" +$"Content-Disposition: form-data;name=\"{fieldName}\"\r\n\r\n" +$"{fieldValue}\r\n";this._postDatas.Add(this.Encoding.GetBytes(field));}/// <summary>/// 设置表单数据字段, ⽤于⽂件类型数据/// </summary>/// <param name="fieldName">字段名称</param>/// <param name="fileName">⽂件名</param>/// <param name="contentType">内容类型, 传⼊ null 将默认使⽤ application/octet-stream</param>/// <param name="fs">⽂件流</param>public void SetField(string fieldName, string fileName, string contentType, Stream fs){var fileBytes = new byte[fs.Length];using (fs){fs.Read(fileBytes, 0, fileBytes.Length);}SetField(fieldName, fileName, contentType, fileBytes);}/// <summary>/// 设置表单数据字段, ⽤于⽂件类型数据/// </summary>/// <param name="fieldName">字段名称</param>/// <param name="fileName">⽂件名</param>/// <param name="contentType">内容类型, 传⼊ null 将默认使⽤ application/octet-stream</param>/// <param name="fileBytes">⽂件字节数组</param>public void SetField(string fieldName, string fileName, string contentType, byte[] fileBytes){var field = $"--{this._boundary}\r\n" +$"Content-Disposition: form-data; name=\"{fieldName}\";filename=\"{fileName}\"\r\n" +$"Content-Type:{contentType ?? "application/octet-stream"}\r\n\r\n";this._postDatas.Add(this.Encoding.GetBytes(field));this._postDatas.Add(fileBytes);this._postDatas.Add(this.Encoding.GetBytes("\r\n"));}/// <summary>/// 以POST⽅式向⽬标地址提交表单数据/// </summary>/// <param name="url">⽬标地址, http(s)://</param>/// <returns>⽬标地址的响应</returns>public HttpWebResponse Post(string url){if (string.IsNullOrWhiteSpace(url))throw new ArgumentNullException(nameof(url));HttpWebRequest request = null;if (url.ToLowerInvariant().StartsWith("https")){request = WebRequest.Create(url) as HttpWebRequest;ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((s, c, ch, ss) => { return true; }); request.ProtocolVersion = HttpVersion.Version11;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;request.KeepAlive = true;ServicePointManager.CheckCertificateRevocationList = true; ServicePointManager.DefaultConnectionLimit = 100;ServicePointManager.Expect100Continue = false;}else{request = WebRequest.Create(url) as HttpWebRequest;}request.Method = "POST";request.ContentType = "multipart/form-data;boundary=" + _boundary;erAgent = erAgent;request.Accept = this.Accept;request.Referer = this.Referer;request.CookieContainer = this.CookieContainer;var end = $"--{this._boundary}--\r\n";this._postDatas.Add(this.Encoding.GetBytes(end));var requestStream = request.GetRequestStream();foreach (var item in this._postDatas){requestStream.Write(item, 0, item.Length);}return request.GetResponse() as HttpWebResponse;}/// <summary>/// 以POST⽅式向⽬标地址提交表单数据/// </summary>/// <param name="url">⽬标地址, http(s)://</param>/// <returns>⽬标地址的响应</returns>public async Task<HttpWebResponse> PostAsync(string url){if (string.IsNullOrWhiteSpace(url))throw new ArgumentNullException(nameof(url));HttpWebRequest request = null;if (url.ToLowerInvariant().StartsWith("https")){request = WebRequest.Create(url) as HttpWebRequest;ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((s, c, ch, ss) => { return true; }); request.ProtocolVersion = HttpVersion.Version11;ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;request.KeepAlive = true;ServicePointManager.CheckCertificateRevocationList = true; ServicePointManager.DefaultConnectionLimit = 100;ServicePointManager.Expect100Continue = false;}else{request = WebRequest.Create(url) as HttpWebRequest;}request.Method = "POST";request.ContentType = "multipart/form-data;boundary=" + _boundary;erAgent = erAgent;request.Accept = this.Accept;request.Referer = this.Referer;request.CookieContainer = this.CookieContainer;var end = $"--{this._boundary}--\r\n";this._postDatas.Add(this.Encoding.GetBytes(end));var requestStream = await request.GetRequestStreamAsync();foreach (var item in this._postDatas){await requestStream.WriteAsync(item, 0, item.Length);}return await request.GetResponseAsync() as HttpWebResponse;}}。

C#中使用HttpWebRequest用Post提交Mult...

C#中使用HttpWebRequest用Post提交Mult...

在C#中有HttpWebRequest类,可以很方便用来获取http请求,但是这个类对Post方式没有提供一个很方便的方法来获取数据。

网上有很多人提供了解决方法,但都参差不齐,这里我把我使用的方法总结出来,与大家分享。

本文精华:实现了post的时候即可以有字符串的key-value,还可以带文件。

Post数据格式Post提交数据的时候最重要就是把Key-Value的数据放到http请求流中,而HttpWebRequest没有提供一个属性之类的东西可以让我们自由添加Key-Value,因此就必须手工构造这个数据。

根据RFC 2045协议,一个Http P ost的数据格式如下:Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="file"; filename="file1.dat" Content-Type: application/octet-stream ... contents of file1.dat ...--AaB03x--详细解释如下:Content-Type: multipart/form-data; boundary=AaB03x如上面所示,首先声明数据类型为multipart/form-data, 然后定义边界字符串AaB03x,这个边界字符串就是用来在下面来区分各个数据的,可以随便定义,但是最好是用破折号等数据中一般不会出现的字符。

然后是换行符。

注意:Post中定义的换行符是\r\n--AaB03x这个是边界字符串,注意每一个边界符前面都需要加2个连字符“--”,然后跟上换行符。

C# WebRequest发起Http Post请求模拟登陆并cookie处理示例

C# WebRequest发起Http Post请求模拟登陆并cookie处理示例

C#WebRequest发起HttpPost请求模拟登陆并cookie处理示例CookieContainer cc=new CookieContainer();string url = “http://mailbeta.HttpWebRequest request =(HttpWebRequest)WebRequest.Create(url);request.Method = “POST”;request.CookieContainer=cc;string user=”user”; //用户名string pass=”pass”; //密码string data = “func=login&usr=” + HttpUtility.UrlEncode(user) +“&sel_domain=HttpUtility.UrlEncode(pass) +“&image2."x=0&image2."y=0&verifypcookie=&verifypip=”;request.ContentLength = data.Length;StreamWriter writer = newStreamWriter(request.GetRequestStream(),Encoding.ASCII);writer.Write(data);writer.Flush();HttpWebResponse response = (HttpWebResponse)request.GetResponse();string encoding = response.ContentEncoding;if (encoding == null || encoding.Length < 1) {encoding = "UTF-8"; //默认编码}StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.GetEncoding(encoding));data = reader.ReadToEnd();Console.WriteLine(data);response.Close();int index=data.IndexOf("sid=");string sid=data.Substring(index+4,data.IndexOf("&",index)-index-4);Console.WriteLine(sid);url ="http://wm11."request = (HttpWebRequest)WebRequest.Create(url);request.CookieContainer = cc;foreach(Cookie cookie in response.Cookies) {cc.Add(cookie);}response = (HttpWebResponse)request.GetResponse();encoding = response.ContentEncoding;if (encoding == null || encoding.Length < 1) {encoding = "UTF-8"; //默认编码}reader = newStreamReader(response.GetResponseStream(),Encoding.GetEncoding(encoding));data = reader.ReadToEnd();Console.WriteLine(data);response.Close();这段代码的意思是,模拟登陆263邮箱,别列出收件箱内容(html代码)Related posts:1.C# WebRequest处理Https请求2.C# WebRequest处理Https请求之使用客户端证书。

post请求的实例

post请求的实例

post请求的实例Post请求是一种HTTP请求方法,用于向服务器提交数据。

与Get请求不同,Post请求将数据存储在请求体中而不是URL上。

这种请求方式适合提交表单数据、登录认证、上传文件等场景。

以下是关于Post请求的一些参考内容。

1. Post请求的基本概念和使用方法在Web开发中,Post请求是一种将数据发送到服务器的HTTP请求方式。

它将数据存储在请求体中,而不是URL上,可以传输更多的数据以及敏感信息。

使用Post请求时,需要设置请求头中的Content-Type字段,指定请求体中数据的类型,常见的有"application/x-www-form-urlencoded"和"multipart/form-data"。

通过Post请求,可以向服务器提交表单数据、登录信息、图片、文件等。

2. Post请求的优点和适用场景相比Get请求,Post请求有以下优点:- 可以向服务器提交更多的数据,Get请求受URL长度限制;- 可以使用请求体传输数据,更适合传输敏感信息;- 可以提交表单数据、上传文件等操作。

Post请求适用于以下场景:- 表单提交:用户填写表单后,可以使用Post请求将表单数据提交到服务器进行处理;- 用户登录:用户提交登录信息时,可以使用Post请求将用户名和密码传输给服务器进行验证;- 数据上传:上传文件、图片等数据时,要使用Post请求将数据传输到服务器。

3. 使用Post请求提交表单数据的示例假设有一个简单的登录表单,包括用户名和密码字段,可以通过以下示例使用Post请求将表单数据提交到服务器:HTML部分:```<form action="login.php" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username"><br><br><label for="password">密码:</label><input type="password" id="password"name="password"><br><br><input type="submit" value="提交"></form>```在这个示例中,表单的`action`属性指定了数据提交到的服务器端脚本文件`login.php`,`method`属性指定了使用Post请求。

使用HttpWebRequestPOST上传文件

使用HttpWebRequestPOST上传文件

使⽤HttpWebRequestPOST上传⽂件2019/10/27, .Net c#代码⽚段摘要:使⽤HttpWebRequest向Api接⼝发送⽂件,multipart-form数据格式,POST⽅式/// <summary>/// HttpWebRequest发送⽂件/// </summary>/// <param name="url">url</param>/// <param name="filePath">⽂件路径</param>/// <param name="paramName">⽂件参数名</param>/// <param name="contentType">contentType</param>/// <param name="nameValueCollection">其余要附带的参数键值对</param>public static void HttpUploadFile(string url, string filePath, string paramName, string contentType, NameValueCollection nameValueCollection){string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.ContentType = "multipart/form-data; boundary=" + boundary;request.Method = "POST";request.KeepAlive = true;request.Credentials = CredentialCache.DefaultCredentials;Stream requestStream = request.GetRequestStream();string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";foreach (string key in nameValueCollection.Keys){requestStream.Write(boundarybytes, 0, boundarybytes.Length);string formitem = string.Format(formdataTemplate, key, nameValueCollection[key]);byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);requestStream.Write(formitembytes, 0, formitembytes.Length);}requestStream.Write(boundarybytes, 0, boundarybytes.Length);string header = string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n", paramName, filePath, contentType); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);requestStream.Write(headerbytes, 0, headerbytes.Length);FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);byte[] buffer = new byte[4096];int bytesRead = 0;while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0){requestStream.Write(buffer, 0, bytesRead);}fileStream.Close();byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");requestStream.Write(trailer, 0, trailer.Length);requestStream.Close();WebResponse webResponse = null;try{webResponse = request.GetResponse();Stream responseStream = webResponse.GetResponseStream();StreamReader streamReader = new StreamReader(responseStream);string result = streamReader.ReadToEnd();}catch (Exception ex){if (webResponse != null){webResponse.Close();webResponse = null;}}finally{request = null;}}使⽤NameValueCollection nvc = new NameValueCollection();nvc.Add("id", "1000");nvc.Add("name", "user1");HttpUploadFile("/upload",@"C:\test\test.jpg", "file", "image/jpeg", nvc);。

C#中HttpWebRequest的用法详解

C#中HttpWebRequest的用法详解

C#中HttpWebRequest的⽤法详解HttpWebRequest和HttpWebResponse类是⽤于发送和接收HTTP数据的最好选择。

它们⽀持⼀系列有⽤的属性。

这两个类位于命名空间,默认情况下这个类对于控制台程序来说是可访问的。

请注意,HttpWebRequest对象不是利⽤new关键字通过构造函数来创建的,⽽是利⽤⼯⼚机制(factory mechanism)通过Create()⽅法来创建的。

另外,你可能预计需要显式地调⽤⼀个“Send”⽅法,实际上不需要。

接下来调⽤ HttpWebRequest.GetResponse()⽅法返回的是⼀个HttpWebResponse对象。

你可以把HTTP响应的数据流(stream)绑定到⼀个StreamReader对象,然后就可以通过ReadToEnd()⽅法把整个HTTP响应作为⼀个字符串取回。

也可以通过 StreamReader.ReadLine()⽅法逐⾏取回HTTP响应的内容。

这种技术展⽰了如何限制请求重定向(request redirections)的次数,并且设置了⼀个超时限制。

下⾯是HttpWebRequest的⼀些属性,这些属性对于轻量级的⾃动化测试程序是⾮常重要的。

l AllowAutoRedirect:获取或设置⼀个值,该值指⽰请求是否应跟随重定向响应。

l CookieContainer:获取或设置与此请求关联的cookie。

l Credentials:获取或设置请求的⾝份验证信息。

l KeepAlive:获取或设置⼀个值,该值指⽰是否与 Internet 资源建⽴持久性连接。

l MaximumAutomaticRedirections:获取或设置请求将跟随的重定向的最⼤数⽬。

l Proxy:获取或设置请求的代理信息。

l SendChunked:获取或设置⼀个值,该值指⽰是否将数据分段发送到 Internet 资源。

l Timeout:获取或设置请求的超时值。

requests post请求用法

requests post请求用法

requests post请求用法
requests 是一个流行的 Python HTTP 客户端库,它提供了一种简单而灵活的方式来发送 HTTP 请求。

下面是requests 中post 请求的基本用法:
python:
import requests
# 发送 POST 请求
response = requests.post(url, data=data, headers=headers)
# 处理响应
if response.status_code == 200:
# 请求成功
print(response.text)
else:
# 请求失败
print("Error:", response.status_code)
在上面的代码中,url 是要发送POST 请求的URL,data 是要发送的数据,headers 是可选的请求头信息。

requests.post() 方法返回一个响应对象,可以通过响应对象来获取请求的结果。

在上面的代码中,我们使用response.status_code 来获取响应的状态码,如果状态码为200,表示请求成功。

然后,我们使用response.text 来获取响应的文本内容。

当然,你也可以使用response.json() 方法将响应内容解析为 JSON 格式。

如果响应内容是JSON 格式,那么response.json() 方法会返回一个 Python 字典对象。

除了基本的 POST 请求外,requests 还提供了很多其他的参数和选项来满足不同的需求,比如设置请求头、上传文件、处理重定向等。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用HttpWebRequest发送模拟POST请求
网页中,如果form的method="POST",这时点击submit按钮可以给服务器发送了一个POST请求,如果method="GET",就是向服务器发送GET请求,有兴趣可以先看看POST和GET的区别和使用方法。

这里,我在中使用两个简单的示例介绍了HttpWebRequest对像和使用HttpWebRequest对像模拟POST请求,HttpWebRequest对HTTP协议进行了完整的封装,对HTTP协议中的 Header, Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序。

MSDN对HttpWebRequest和HttpWebResponse的说明:
这里简要介绍如何使用HttpWebRequest&HttpWebResponse两个对象与HTTP服务器进行直接交互的过程,HttpWebRequest类对WebRequest中定义的属性和方法提供支持,在使用HttpWebRequest对象向HTTP服务器发起请求时请不要使用HttpWebRequest对象的构造函数,而应该使用WebRequest.Create()方法来初始化新的HttpWebRequest对象。

如果统一资源标识符方案是"http://"或"https://"时,Create()则返回HttpWebResponse对象。

详细过程及代码如下:
1、创建httpWebRequest对象,HttpWebRequest不能直接通过new来创建,只能通过WebRequest.Create(url)的方式来获得。

WebRequest是获得一些应用层协议对象的一个统一的入口(工厂模式),它根据参数的协议来确定最终创建的对象类型。

2、初始化HttpWebRequest对象,这个过程提供一些http请求常用的标头属性:agentstring,contenttype等,其中agentstring比较有意思,它是用来识别你用的浏览器名字的,通过设置这个属性你可以欺骗服务器你是一个IE,firefox甚至是mac里面的safari。

很多认真设计的网站都会根据这个值来返回对不同浏览器特别优化的代码。

3、附加要POST给服务器的数据到HttpWebRequest对象,附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。

4、读取服务器的返回信息,读取服务器返回的时候,要注意返回数据的
encoding,如果我们提供的解码类型不对,会造成乱码,比较常见的是utf-8
和gb2312。

通常,网站会把它编码的方式放在http header里面,如果没有,我们只能通过对返回二进制值的统计方法来确定它的编码方式。

===================================================================== =================================
const string sUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
const string sContentType = "application/x-www-form-urlencoded"; const string sRequestEncoding = "ascii";
const string sResponseEncoding = "utf-8";
/// <summary>
/// 1:Post data to url
/// </summary>
/// <param name="data">要post的数据</param>
/// <param name="url">目标url</param>
/// <returns>服务器响应</returns>
static string PostDataToUrl(string data, string url)
{
Encoding encoding = Encoding.GetEncoding(sRequestEncoding);
byte[] bytesToPost = encoding.GetBytes(data);
return PostDataToUrl(bytesToPost, url);
}
/// <summary>
/// Post data to url
/// </summary>
/// <param name="data">要post的数据</param>
/// <param name="url">目标url</param>
/// <returns>服务器响应</returns>
static string PostDataToUrl(byte[] data, string url)
{
//创建httpWebRequest对象
.WebRequest webRequest = .WebRequest.Create(url); .HttpWebRequest httpRequest = webRequest as
.HttpWebRequest;
if (httpRequest == null)
{
throw new ApplicationException(string.Format("Invalid url string: {0}", url));
}
//填充httpWebRequest的基本信息
erAgent = sUserAgent;
httpRequest.ContentType = sContentType;
httpRequest.Method = "POST";
//填充并发送要post的内容
httpRequest.ContentLength = data.Length;
Stream requestStream = httpRequest.GetRequestStream(); requestStream.Write(data, 0, data.Length);
requestStream.Close();
//发送post请求到服务器并读取服务器返回信息
Stream responseStream = null; ;
try
{
responseStream = httpRequest.GetResponse().GetResponseStream();
}
catch (Exception e)
{
throw e;
}
//读取服务器返回信息
string stringResponse = string.Empty;
using (StreamReader responseReader = new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))
{
stringResponse = responseReader.ReadToEnd();
}
responseStream.Close();
return stringResponse;
}
//调用
string contentHtml = PostDataToUrl("ename=simon&des=87cool",
"");
//附加一个HttpWebRequest的一个小例子
/// <summary>
/// 小例子2:直接请求,保存远程图片到本地
/// </summary>
static void SaveRemoteImg()
{
.HttpWebRequest httpRequest =
(.HttpWebRequest).HttpWebRequest.Create("http:// .logo.gif");
httpRequest.Timeout = 150000;
.HttpWebResponse resp =
(.HttpWebResponse)httpRequest.GetResponse();
System.Drawing.Image img = new
System.Drawing.Bitmap(resp.GetResponseStream());
img.Save("/.gif");
}
===================================================================== ===================。

相关文档
最新文档