日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 操作http协议学习总结

發(fā)布時(shí)間:2025/4/14 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 操作http协议学习总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C#中HttpWebRequest的用法詳解

http://www.jb51.net/article/57156.htm


這篇文章主要介紹了C#中HttpWebRequest的用法,以實(shí)例的形式詳細(xì)敘述了HttpWebRequest類中GET與POST的用法,非常具有參考借鑒價(jià)值,需要的朋友可以參考下


HttpWebRequest類主要利用HTTP 協(xié)議和服務(wù)器交互,通常是通過 GET 和 POST 兩種方式來對(duì)數(shù)據(jù)進(jìn)行獲取和提交。下面對(duì)這兩種方式進(jìn)行一下說明:


GET 方式:
GET 方式通過在網(wǎng)絡(luò)地址附加參數(shù)來完成數(shù)據(jù)的提交,比如在地址 http://www.jb51.net/?hl=zh-CN 中,前面部分 http://www.jb51.net表示數(shù)據(jù)提交的網(wǎng)址,后面部分 hl=zh-CN 表示附加的參數(shù),其中 hl 表示一個(gè)鍵(key), zh-CN 表示這個(gè)鍵對(duì)應(yīng)的值(value)。
程序代碼如下: ?




復(fù)制代碼 代碼如下:HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.jb51.net?hl=zh-CN" );
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
//在這里對(duì)接收到的頁面內(nèi)容進(jìn)行處理
}
使用 GET 方式提交中文數(shù)據(jù)。


GET 方式通過在網(wǎng)絡(luò)地址中附加參數(shù)來完成數(shù)據(jù)提交,對(duì)于中文的編碼,常用的有 gb2312 和 utf8 兩種。
用 gb2312 方式編碼訪問的程序代碼如下:




復(fù)制代碼 代碼如下:Encoding myEncoding = Encoding.GetEncoding("gb2312");
string address = "http://www.jb51.net/?" + HttpUtility.UrlEncode("參數(shù)一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
//在這里對(duì)接收到的頁面內(nèi)容進(jìn)行處理
}
在上面的程序代碼中,我們以 GET 方式訪問了網(wǎng)址 http://www.jb51.net ,傳遞了參數(shù)“參數(shù)一=值一”,由于無法告知對(duì)方提交數(shù)據(jù)的編碼類型,所以編碼方式要以對(duì)方的網(wǎng)站為標(biāo)準(zhǔn)。
?
POST 方式:


POST 方式通過在頁面內(nèi)容中填寫參數(shù)的方法來完成數(shù)據(jù)的提交,參數(shù)的格式和 GET 方式一樣,是類似于 hl=zh-CN&newwindow=1 這樣的結(jié)構(gòu)。
程序代碼如下:




復(fù)制代碼 代碼如下:string param = "hl=zh-CN&newwindow=1";
byte[] bs = Encoding.ASCII.GetBytes(param);
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.jb51.net/" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
using (Stream reqStream = req.GetRequestStream())
{
? ?reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
? ?//在這里對(duì)接收到的頁面內(nèi)容進(jìn)行處理
}
在上面的代碼中,我們?cè)L問了 http://www.jb51.net 的網(wǎng)址,分別以 GET 和 POST 方式提交了數(shù)據(jù),并接收了返回的頁面內(nèi)容。然而,如果提交的參數(shù)中含有中文,那么這樣的處理是不夠的,需要對(duì)其進(jìn)行編碼,讓對(duì)方網(wǎng)站能夠識(shí)別。 ?
使用 POST 方式提交中文數(shù)據(jù)
POST 方式通過在頁面內(nèi)容中填寫參數(shù)的方法來完成數(shù)據(jù)的提交,由于提交的參數(shù)中可以說明使用的編碼方式,所以理論上能獲得更大的兼容性。
用 gb2312 方式編碼訪問的程序代碼如下: ?




復(fù)制代碼 代碼如下:Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param = HttpUtility.UrlEncode("參數(shù)一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding) + "&" + HttpUtility.UrlEncode("參數(shù)二", myEncoding) + "=" + HttpUtility.UrlEncode("值二", myEncoding);
byte[] postBytes = Encoding.ASCII.GetBytes(param);
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.jb51.net/" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength = postBytes.Length;
using (Stream reqStream = req.GetRequestStream())
{
? ?reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
? ?//在這里對(duì)接收到的頁面內(nèi)容進(jìn)行處理
}
從上面的代碼可以看出, POST 中文數(shù)據(jù)的時(shí)候,先使用 UrlEncode 方法將中文字符轉(zhuǎn)換為編碼后的 ASCII 碼,然后提交到服務(wù)器,提交的時(shí)候可以說明編碼的方式,用來使對(duì)方服務(wù)器能夠正確的解析。 ?
用C#語言寫的關(guān)于HttpWebRequest 類的使用方法


using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
namespace HttpWeb
{
? ? /// <summary>?
? ? /// ?Http操作類?
? ? /// </summary>?
? ? public static class httptest
? ? {
? ? ? ? /// <summary>?
? ? ? ? /// ?獲取網(wǎng)址HTML?
? ? ? ? /// </summary>?
? ? ? ? /// <param name="URL">網(wǎng)址 </param>?
? ? ? ? /// <returns> </returns>?
? ? ? ? public static string GetHtml(string URL)
? ? ? ? {
? ? ? ? ? ? WebRequest wrt;
? ? ? ? ? ? wrt = WebRequest.Create(URL);
? ? ? ? ? ? wrt.Credentials = CredentialCache.DefaultCredentials;
? ? ? ? ? ? WebResponse wrp;
? ? ? ? ? ? wrp = wrt.GetResponse();
? ? ? ? ? ? string reader = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding("gb2312")).ReadToEnd();
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? wrt.GetResponse().Close();
? ? ? ? ? ? }
? ? ? ? ? ? catch (WebException ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw ex;
? ? ? ? ? ? }
? ? ? ? ? ? return reader;
? ? ? ? }
? ? ? ? /// <summary>?
? ? ? ? /// 獲取網(wǎng)站cookie?
? ? ? ? /// </summary>?
? ? ? ? /// <param name="URL">網(wǎng)址 </param>?
? ? ? ? /// <param name="cookie">cookie </param>?
? ? ? ? /// <returns> </returns>?
? ? ? ? public static string GetHtml(string URL, out string cookie)
? ? ? ? {
? ? ? ? ? ? WebRequest wrt;
? ? ? ? ? ? wrt = WebRequest.Create(URL);
? ? ? ? ? ? wrt.Credentials = CredentialCache.DefaultCredentials;
? ? ? ? ? ? WebResponse wrp;
? ? ? ? ? ? wrp = wrt.GetResponse();


? ? ? ? ? ? string html = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding("gb2312")).ReadToEnd();
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? wrt.GetResponse().Close();
? ? ? ? ? ? }
? ? ? ? ? ? catch (WebException ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw ex;
? ? ? ? ? ? }
? ? ? ? ? ? cookie = wrp.Headers.Get("Set-Cookie");
? ? ? ? ? ? return html;
? ? ? ? }
? ? ? ? public static string GetHtml(string URL, string postData, string cookie, out string header, string server)
? ? ? ? {
? ? ? ? ? ? return GetHtml(server, URL, postData, cookie, out header);
? ? ? ? }
? ? ? ? public static string GetHtml(string server, string URL, string postData, string cookie, out string header)
? ? ? ? {
? ? ? ? ? ? byte[] byteRequest = Encoding.GetEncoding("gb2312").GetBytes(postData);
? ? ? ? ? ? return GetHtml(server, URL, byteRequest, cookie, out header);
? ? ? ? }
? ? ? ? public static string GetHtml(string server, string URL, byte[] byteRequest, string cookie, out string header)
? ? ? ? {
? ? ? ? ? ? byte[] bytes = GetHtmlByBytes(server, URL, byteRequest, cookie, out header);
? ? ? ? ? ? Stream getStream = new MemoryStream(bytes);
? ? ? ? ? ? StreamReader streamReader = new StreamReader(getStream, Encoding.GetEncoding("gb2312"));
? ? ? ? ? ? string getString = streamReader.ReadToEnd();
? ? ? ? ? ? streamReader.Close();
? ? ? ? ? ? getStream.Close();
? ? ? ? ? ? return getString;
? ? ? ? }
? ? ? ? /// <summary>?
? ? ? ? /// Post模式瀏覽?
? ? ? ? /// </summary>?
? ? ? ? /// <param name="server">服務(wù)器地址 </param>?
? ? ? ? /// <param name="URL">網(wǎng)址 </param>?
? ? ? ? /// <param name="byteRequest">流 </param>?
? ? ? ? /// <param name="cookie">cookie </param>?
? ? ? ? /// <param name="header">句柄 </param>?
? ? ? ? /// <returns> </returns>?
? ? ? ? public static byte[] GetHtmlByBytes(string server, string URL, byte[] byteRequest, string cookie, out string header)
? ? ? ? {
? ? ? ? ? ? long contentLength;
? ? ? ? ? ? HttpWebRequest httpWebRequest;
? ? ? ? ? ? HttpWebResponse webResponse;
? ? ? ? ? ? Stream getStream;
? ? ? ? ? ? httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
? ? ? ? ? ? CookieContainer co = new CookieContainer();
? ? ? ? ? ? co.SetCookies(new Uri(server), cookie);
? ? ? ? ? ? httpWebRequest.CookieContainer = co;
? ? ? ? ? ? httpWebRequest.ContentType = "application/x-www-form-urlencoded";
? ? ? ? ? ? httpWebRequest.Accept =
? ? ? ? ? ? ? ? "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
? ? ? ? ? ? httpWebRequest.Referer = server;
? ? ? ? ? ? httpWebRequest.UserAgent =
? ? ? ? ? ? ? ? "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";
? ? ? ? ? ? httpWebRequest.Method = "Post";
? ? ? ? ? ? httpWebRequest.ContentLength = byteRequest.Length;
? ? ? ? ? ? Stream stream;
? ? ? ? ? ? stream = httpWebRequest.GetRequestStream();
? ? ? ? ? ? stream.Write(byteRequest, 0, byteRequest.Length);
? ? ? ? ? ? stream.Close();
? ? ? ? ? ? webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
? ? ? ? ? ? header = webResponse.Headers.ToString();
? ? ? ? ? ? getStream = webResponse.GetResponseStream();
? ? ? ? ? ? contentLength = webResponse.ContentLength;
? ? ? ? ? ? byte[] outBytes = new byte[contentLength];
? ? ? ? ? ? outBytes = ReadFully(getStream);
? ? ? ? ? ? getStream.Close();
? ? ? ? ? ? return outBytes;
? ? ? ? }
? ? ? ? public static byte[] ReadFully(Stream stream)
? ? ? ? {
? ? ? ? ? ? byte[] buffer = new byte[128];
? ? ? ? ? ? using (MemoryStream ms = new MemoryStream())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? while (true)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? int read = stream.Read(buffer, 0, buffer.Length);
? ? ? ? ? ? ? ? ? ? if (read <= 0)
? ? ? ? ? ? ? ? ? ? ? ? return ms.ToArray();
? ? ? ? ? ? ? ? ? ? ms.Write(buffer, 0, read);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? /// <summary>?
? ? ? ? /// Get模式?
? ? ? ? /// </summary>?
? ? ? ? /// <param name="URL">網(wǎng)址 </param>?
? ? ? ? /// <param name="cookie">cookies </param>?
? ? ? ? /// <param name="header">句柄 </param>?
? ? ? ? /// <param name="server">服務(wù)器 </param>?
? ? ? ? /// <param name="val">服務(wù)器 </param>?
? ? ? ? /// <returns> </returns>?
? ? ? ? public static string GetHtml(string URL, string cookie, out string header, string server)
? ? ? ? {
? ? ? ? ? ? return GetHtml(URL, cookie, out header, server, "");
? ? ? ? }
? ? ? ? /// <summary>?
? ? ? ? /// Get模式瀏覽?
? ? ? ? /// </summary>?
? ? ? ? /// <param name="URL">Get網(wǎng)址 </param>?
? ? ? ? /// <param name="cookie">cookie </param>?
? ? ? ? /// <param name="header">句柄 </param>?
? ? ? ? /// <param name="server">服務(wù)器地址 </param>?
? ? ? ? /// <param name="val"> </param>?
? ? ? ? /// <returns> </returns>?
? ? ? ? public static string GetHtml(string URL, string cookie, out string header, string server, string val)
? ? ? ? {
? ? ? ? ? ? HttpWebRequest httpWebRequest;
? ? ? ? ? ? HttpWebResponse webResponse;
? ? ? ? ? ? Stream getStream;
? ? ? ? ? ? StreamReader streamReader;
? ? ? ? ? ? string getString = "";
? ? ? ? ? ? httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
? ? ? ? ? ? httpWebRequest.Accept = "*/*";
? ? ? ? ? ? httpWebRequest.Referer = server;
? ? ? ? ? ? CookieContainer co = new CookieContainer();
? ? ? ? ? ? co.SetCookies(new Uri(server), cookie);
? ? ? ? ? ? httpWebRequest.CookieContainer = co;
? ? ? ? ? ? httpWebRequest.UserAgent =
? ? ? ? ? ? ? ? "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";
? ? ? ? ? ? httpWebRequest.Method = "GET";
? ? ? ? ? ? webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
? ? ? ? ? ? header = webResponse.Headers.ToString();
? ? ? ? ? ? getStream = webResponse.GetResponseStream();
? ? ? ? ? ? streamReader = new StreamReader(getStream, Encoding.GetEncoding("gb2312"));
? ? ? ? ? ? getString = streamReader.ReadToEnd();
? ? ? ? ? ? streamReader.Close();
? ? ? ? ? ? getStream.Close();
? ? ? ? ? ? return getString;
? ? ? ? }
? ?}
}
========

C# 利用HttpListener監(jiān)聽處理Http請(qǐng)求

http://blog.sina.com.cn/s/blog_6f3ff2c90101wwh5.html


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Xml.Serialization;
using System.Threading;
using System.Web;
namespace ConsoleApplication3
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? HttpListener listerner = new HttpListener();
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? for (; true; )
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.Write("請(qǐng)輸入服務(wù)器IP地址:");
? ? ? ? ? ? ? ? ? ? ? ? ? ? string ip = Console.ReadLine();


? ? ? ? ? ? ? ? ? ? ? ? ? ? listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份驗(yàn)證 Anonymous匿名訪問
? ? ? ? ? ? ? ? ? ? ? ? ? ? listerner.Prefixes.Add("http://" + ip + ":1500/AnsweringMachineService/");


? ? ? ? ? ? ? ? ? ? ? ? ? ? // listerner.Prefixes.Add("http://localhost/web/");
? ? ? ? ? ? ? ? ? ? ? ? ? ? listerner.Start();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? catch (Exception e)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("未能成功連接服務(wù)器.....");
? ? ? ? ? ? ? ? ? ? ? ? ? ? listerner = new HttpListener();
? ? ? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? Console.WriteLine("服務(wù)器啟動(dòng)成功.......");


? ? ? ? ? ? ? ? ? ? int maxThreadNum, portThreadNum;


? ? ? ? ? ? ? ? ? ? //線程池
? ? ? ? ? ? ? ? ? ? int minThreadNum;
? ? ? ? ? ? ? ? ? ? ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
? ? ? ? ? ? ? ? ? ? ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
? ? ? ? ? ? ? ? ? ? Console.WriteLine("最大線程數(shù):{0}", maxThreadNum);
? ? ? ? ? ? ? ? ? ? Console.WriteLine("最小空閑線程數(shù):{0}", minThreadNum);


? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? //ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? Console.WriteLine("\n\n等待客戶連接中。。。。");
? ? ? ? ? ? ? ? ? ? while (true)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //等待請(qǐng)求連接
? ? ? ? ? ? ? ? ? ? ? ? //沒有請(qǐng)求則GetContext處于阻塞狀態(tài)
? ? ? ? ? ? ? ? ? ? ? ? HttpListenerContext ctx = listerner.GetContext();


? ? ? ? ? ? ? ? ? ? ? ? ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc), ctx);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? listerner.Stop();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception e)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(e.Message);
? ? ? ? ? ? ? ? Console.Write("Press any key to continue . . . ");
? ? ? ? ? ? ? ? Console.ReadKey( );
? ? ? ? ? ? }


? ? ? ? }


? ? ? ? static void TaskProc(object o)
? ? ? ? {
? ? ? ? ? ? HttpListenerContext ctx = (HttpListenerContext)o;


? ? ? ? ? ? ctx.Response.StatusCode = 200;//設(shè)置返回給客服端http狀態(tài)代碼
? ? ? ?
? ? ? ? ? ? string type = ctx.Request.QueryString["type"];
? ? ? ? ? ? string userId = ctx.Request.QueryString["userId"];
? ? ? ? ? ? string password = ctx.Request.QueryString["password"];
? ? ? ? ? ? string filename = Path.GetFileName(ctx.Request.RawUrl);
? ? ? ? ? ? string userName = HttpUtility.ParseQueryString(filename).Get("userName");//避免中文亂碼


? ? //進(jìn)行處理
? ? ? ? ? ??
? ? ? ? ? ? //使用Writer輸出http響應(yīng)代碼
? ? ? ? ? ? using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? writer.Write(“處理結(jié)果”);
? ? ? ? ? ? ? ? writer.Close();
? ? ? ? ? ? ? ? ctx.Response.Close();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}


Android客戶端:
public static void Register(final Handler handler, final Context context,
final String userId, final String userName,final int groupId, final String password){
new Thread(new Runnable(){
? ? ? ?public void run() {
? ? ? ? if(!CommonTools.checkNetwork(context)){
? ? ? ? Message msg = new Message();
? ? ? ? msg.what = Signal.NETWORK_ERR;
? ? ? ? handler.sendMessage(msg);
? ? ? ? return;
? ? ? ? }
? ? ? ?
? ? ? ? try { ?
? ? ? ? String content = "";
? ? ? ? String tmp ? = ? java.net.URLEncoder.encode(userName, ? "utf-8"); ? //防止中文亂碼
? ? ? ? URL url = new URL(URL+"?type=Register&userId="+userId+"&password="+password+"&groupId="+groupId+"&userName="+tmp); ??
? ? ? ? ? ? ? ?// HttpURLConnection ??
? ? ? ? ? ? ? ?HttpURLConnection httpconn = (HttpURLConnection) url.openConnection(); ??
? ? ?
? ? ? ? ? ? ? ?if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) { ??
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ?InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(), "utf-8"); ??
? ? ? ? ? ? ? ? ? ?int i; ??
? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ?// read ??
? ? ? ? ? ? ? ? ? ?while ((i = isr.read()) != -1) { ??
? ? ? ? ? ? ? ? ? ? ? ?content = content + (char) i; ??
? ? ? ? ? ? ? ? ? ?} ??
? ? ? ? ? ? ? ? ? ?isr.close(); ? ??
? ? ? ? ? ? ? ?} ??
? ? ? ? ? ? ? ?//disconnect ??
? ? ? ? ? ? ? ?httpconn.disconnect(); ??


? ? } catch (Exception e) {
? ? e.printStackTrace();
? ? }
? ? ? ?}//run
}).start();//thread
}


注意:
1.中文亂碼問題
? ?在客戶端采用如下形式
? ?String tmp ? = ? java.net.URLEncoder.encode(userName, ? "utf-8"); ? //防止中文亂碼
? ?服務(wù)器端
? ?string filename = Path.GetFileName(ctx.Request.RawUrl);
? ?string userName = HttpUtility.ParseQueryString(filename).Get("userName");//避免中文亂碼
?
? ?服務(wù)器端需要引入: using System.Web;
? ?此時(shí)可能提示找不到庫,則在項(xiàng)目右鍵添加引用 找到 System.Web.dll勾選即可


2.[System.Net.HttpListenerException] = {"拒絕訪問。"}問題
? ?如果是win7或者win8,在cmd.exe上右鍵,以管理員身份運(yùn)行,然后執(zhí)行下面的命令
? ?netsh http add urlacl url=http://本機(jī)IP:1500/ user=用戶名(如Administrator)
? ?
3.記得關(guān)閉防火墻,或者只開放指定端口,步驟如下:
? ? ? ? step1、點(diǎn)擊控制面板
  
  step2、選擇windows防火墻,點(diǎn)擊高級(jí)設(shè)置
  
  step3、在彈出的“高級(jí)安全windows防火墻”點(diǎn)擊“入站規(guī)則”,在右側(cè)“操作”欄點(diǎn)擊“入站規(guī)則”下的“新建規(guī)則…”,此時(shí)會(huì)彈出一個(gè)窗口讓你設(shè)置。剩下的就非常傻瓜化了。
  
  step4、彈出“新建入站規(guī)則向?qū)А?規(guī)則類型-選中“端口”,點(diǎn)擊下一步。選擇規(guī)則應(yīng)用的協(xié)議“TCP/UDP”如果是TCP你就選擇TCP,UDP就選擇UDP。再勾選“特定本地端口”在文本框輸入您想開放的端口號(hào)(例如1521)。
  
  step5、點(diǎn)擊下一步,到“連接符合指定條件時(shí)應(yīng)該進(jìn)行什么操作?”選擇“允許連接”。點(diǎn)擊下一步到“配置文件”何時(shí)應(yīng)用該規(guī)則,勾選“域”、“專用”、“公用”點(diǎn)擊下一步。
  
  step6、配置規(guī)則名稱,隨便輸入你自己認(rèn)為好記的規(guī)則名稱即可。
========

C# 中使用System.Net.Http.HttpClient 模擬登錄博客園 (GET/POST)

http://www.tuicool.com/articles/rmiqYz


主題 HttpComponents C#
一、 System.Net.Http .HttpClient簡介


System.Net.Http 是微軟.net4.5中推出的HTTP 應(yīng)用程序的編程接口, 微軟稱之為“現(xiàn)代化的 HTTP 編程接口”, 主要提供如下內(nèi)容:


1. 用戶通過 HTTP 使用現(xiàn)代化的 Web Service 的客戶端組件;


2. 能夠同時(shí)在客戶端與服務(wù)端同時(shí)使用的 HTTP 組件(比如處理 HTTP 標(biāo)頭和消息), 為客戶端和服務(wù)端提供一致的編程模型。


個(gè)人看來是抄襲 apache http client ,目前網(wǎng)上用的人好像不多, 個(gè)人認(rèn)為使用httpclient最大的好處是:不用自己管理cookie,只要負(fù)責(zé)寫好請(qǐng)求即可。


由于網(wǎng)上資料不多,這里借登錄博客園網(wǎng)站做個(gè)簡單的總結(jié)其get和post請(qǐng)求的用法。


查看微軟的api可以發(fā)現(xiàn)其屬性方法: http://msdn.microsoft.com/zh-cn/library/system.net.http.httpclient.aspx


由其api可以看出如果想 設(shè)置請(qǐng)求頭 只需要在 DefaultRequestHeaders 里進(jìn)行設(shè)置


創(chuàng)建httpcliet可以直接new HttpClient()


發(fā)送請(qǐng)求 可以按發(fā)送方式分別調(diào)用其方法,如 get調(diào)用 GetAsync(Uri) , post調(diào)用 PostAsync(Uri, HttpContent) ,其它依此類推。。。


二、實(shí)例(模擬post登錄博客園)


首先,需要說明的是, 本實(shí)例環(huán)境是win7 64位+vs 2013+ .net 4.5框架。


1.使用vs2013新建一個(gè)控制臺(tái)程序,或者窗體程序,如下圖所示:




2.必須引入System.Net.Http框架,否則將不能使用httpclient


3.實(shí)現(xiàn)代碼


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;


namespace ClassLibrary1
{
public class Class1
{
private static String dir = @"C:\work\";


/// <summary>
/// 寫文件到本地
/// </summary>
/// <param name="fileName"></param>
/// <param name="html"></param>
public static void Write(string fileName, string html)
{
try
{
FileStream fs = new FileStream(dir + fileName, FileMode.Create);
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
sw.Write(html);
sw.Close();
fs.Close();


}catch(Exception ex){
Console.WriteLine(ex.StackTrace);
}
??
}


/// <summary>
/// 寫文件到本地
/// </summary>
/// <param name="fileName"></param>
/// <param name="html"></param>
public static void Write(string fileName, byte[] html)
{
try
{
File.WriteAllBytes(dir + fileName, html);
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}

}


/// <summary>
/// 登錄博客園
/// </summary>
public static void LoginCnblogs()
{
HttpClient httpClient = new HttpClient();
httpClient.MaxResponseContentBufferSize = 256000;
httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");
String url = "http://passport.cnblogs.com/login.aspx";
HttpResponseMessage response = httpClient.GetAsync(new Uri(url)).Result;
String result = response.Content.ReadAsStringAsync().Result;


String username = "hi_amos";
String password = "密碼";


do
{
String __EVENTVALIDATION = new Regex("id=\"__EVENTVALIDATION\" value=\"(.*?)\"").Match(result).Groups[1].Value;
String __VIEWSTATE = new Regex("id=\"__VIEWSTATE\" value=\"(.*?)\"").Match(result).Groups[1].Value;
String LBD_VCID_c_login_logincaptcha = new Regex("id=\"LBD_VCID_c_login_logincaptcha\" value=\"(.*?)\"").Match(result).Groups[1].Value;


//圖片驗(yàn)證碼
url = "http://passport.cnblogs.com" + new Regex("id=\"c_login_logincaptcha_CaptchaImage\" src=\"(.*?)\"").Match(result).Groups[1].Value;
response = httpClient.GetAsync(new Uri(url)).Result;
Write("amosli.png", response.Content.ReadAsByteArrayAsync().Result);

Console.WriteLine("輸入圖片驗(yàn)證碼:");
String imgCode = "wupve";//驗(yàn)證碼寫到本地了,需要手動(dòng)填寫
imgCode = ?Console.ReadLine();


//開始登錄
url = "http://passport.cnblogs.com/login.aspx";
List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>();
paramList.Add(new KeyValuePair<string, string>("__EVENTTARGET", ""));
paramList.Add(new KeyValuePair<string, string>("__EVENTARGUMENT", ""));
paramList.Add(new KeyValuePair<string, string>("__VIEWSTATE", __VIEWSTATE));
paramList.Add(new KeyValuePair<string, string>("__EVENTVALIDATION", __EVENTVALIDATION));
paramList.Add(new KeyValuePair<string, string>("tbUserName", username));
paramList.Add(new KeyValuePair<string, string>("tbPassword", password));
paramList.Add(new KeyValuePair<string, string>("LBD_VCID_c_login_logincaptcha", LBD_VCID_c_login_logincaptcha));
paramList.Add(new KeyValuePair<string, string>("LBD_BackWorkaround_c_login_logincaptcha", "1"));
paramList.Add(new KeyValuePair<string, string>("CaptchaCodeTextBox", imgCode));
paramList.Add(new KeyValuePair<string, string>("btnLogin", "登 ?錄"));
paramList.Add(new KeyValuePair<string, string>("txtReturnUrl", "http://home.cnblogs.com/"));
response = httpClient.PostAsync(new Uri(url), new FormUrlEncodedContent(paramList)).Result;
result = response.Content.ReadAsStringAsync().Result;
Write("myCnblogs.html",result);
} while (result.Contains("驗(yàn)證碼錯(cuò)誤,麻煩您重新輸入"));


Console.WriteLine("登錄成功!");

//用完要記得釋放
httpClient.Dispose();
}


public static void Main()
{
?LoginCnblogs();
}


}
代碼分析:


首先,從Main函數(shù)開始,調(diào)用LoginCnblogs方法;


其次,使用GET方法:


HttpResponseMessage response = httpClient.GetAsync(new Uri(url)).Result;
?String result = response.Content.ReadAsStringAsync().Result;
再者,使用POST方法:


? List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>();
? ? ? ? ? ? ? ? paramList.Add(new KeyValuePair<string, string>("__EVENTTARGET", ""));
? ....
? ? ? ? ? ? ? ? response = httpClient.PostAsync(new Uri(url), new FormUrlEncodedContent(paramList)).Result;
? ? ? ? ? ? ? ? result = response.Content.ReadAsStringAsync().Result;
最后, 注意其返回值可以是string,也可以是byte[],和stream的方式,這里看你需要什么吧。




4.登錄成功后的截圖


1).使用瀏覽器登錄后的截圖:




2).使用Httpcliet登錄后的截圖:


總結(jié),可以發(fā)現(xiàn)C#中HttpClient的用法和Java中非常相似,所以,說其抄襲確實(shí)不為過。
========

在C#用HttpWebRequest中發(fā)送GET/HTTP/HTTPS請(qǐng)求

http://zhoufoxcn.blog.51cto.com/792419/561934/


?這個(gè)需求來自于我最近練手的一個(gè)項(xiàng)目,在項(xiàng)目中我需要將一些自己發(fā)表的和收藏整理的網(wǎng)文集中到一個(gè)地方存放,如果全部采用手工操作工作量大而且繁瑣,因此周公決定利用C#來實(shí)現(xiàn)。在很多地方都需要驗(yàn)證用戶身份才可以進(jìn)行下一步操作,這就免不了POST請(qǐng)求來登錄,在實(shí)際過程中發(fā)現(xiàn)有些網(wǎng)站登錄是HTTPS形式的,在解決過程中遇到了一些小問題,現(xiàn)在跟大家分享。
?通用輔助類
?下面是我編寫的一個(gè)輔助類,在這個(gè)類中采用了HttpWebRequest中發(fā)送GET/HTTP/HTTPS請(qǐng)求,因?yàn)橛械臅r(shí)候需要獲取認(rèn)證信息(如Cookie),所以返回的是HttpWebResponse對(duì)象,有了返回的HttpWebResponse實(shí)例,可以獲取登錄過程中返回的會(huì)話信息,也可以獲取響應(yīng)流。
?代碼如下:
?
using System; ?
using System.Collections.Generic; ?
using System.Linq; ?
using System.Text; ?
using System.Net.Security; ?
using System.Security.Cryptography.X509Certificates; ?
using System.DirectoryServices.Protocols; ?
using System.ServiceModel.Security; ?
using System.Net; ?
using System.IO; ?
using System.IO.Compression; ?
using System.Text.RegularExpressions; ?
/* ? ?
?* 作者:周公(zhoufoxcn) ? ?
?* 日期:2011-05-08 ? ?
?* 原文出處:http://blog.csdn.net/zhoufoxcn 或http://zhoufoxcn.blog.51cto.com ? ?
?* 版權(quán)說明:本文可以在保留原文出處的情況下使用于非商業(yè)用途,周公對(duì)此不作任何擔(dān)保或承諾。 ? ?
?* */?
namespace BaiduCang ?
{ ?
? ? /// <summary> ?
? ? /// 有關(guān)HTTP請(qǐng)求的輔助類 ?
? ? /// </summary> ?
? ? public class HttpWebResponseUtility ?
? ? { ?
? ? ? ? private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; ?
? ? ? ? /// <summary> ?
? ? ? ? /// 創(chuàng)建GET方式的HTTP請(qǐng)求 ?
? ? ? ? /// </summary> ?
? ? ? ? /// <param name="url">請(qǐng)求的URL</param> ?
? ? ? ? /// <param name="timeout">請(qǐng)求的超時(shí)時(shí)間</param> ?
? ? ? ? /// <param name="userAgent">請(qǐng)求的客戶端瀏覽器信息,可以為空</param> ?
? ? ? ? /// <param name="cookies">隨同HTTP請(qǐng)求發(fā)送的Cookie信息,如果不需要身份驗(yàn)證可以為空</param> ?
? ? ? ? /// <returns></returns> ?
? ? ? ? public static HttpWebResponse CreateGetHttpResponse(string url,int? timeout, string userAgent,CookieCollection cookies) ?
? ? ? ? { ?
? ? ? ? ? ? if (string.IsNullOrEmpty(url)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? throw new ArgumentNullException("url"); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; ?
? ? ? ? ? ? request.Method = "GET"; ?
? ? ? ? ? ? request.UserAgent = DefaultUserAgent; ?
? ? ? ? ? ? if (!string.IsNullOrEmpty(userAgent)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.UserAgent = userAgent; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if (timeout.HasValue) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.Timeout = timeout.Value; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if (cookies != null) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.CookieContainer = new CookieContainer(); ?
? ? ? ? ? ? ? ? request.CookieContainer.Add(cookies); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? return request.GetResponse() as HttpWebResponse; ?
? ? ? ? } ?
? ? ? ? /// <summary> ?
? ? ? ? /// 創(chuàng)建POST方式的HTTP請(qǐng)求 ?
? ? ? ? /// </summary> ?
? ? ? ? /// <param name="url">請(qǐng)求的URL</param> ?
? ? ? ? /// <param name="parameters">隨同請(qǐng)求POST的參數(shù)名稱及參數(shù)值字典</param> ?
? ? ? ? /// <param name="timeout">請(qǐng)求的超時(shí)時(shí)間</param> ?
? ? ? ? /// <param name="userAgent">請(qǐng)求的客戶端瀏覽器信息,可以為空</param> ?
? ? ? ? /// <param name="requestEncoding">發(fā)送HTTP請(qǐng)求時(shí)所用的編碼</param> ?
? ? ? ? /// <param name="cookies">隨同HTTP請(qǐng)求發(fā)送的Cookie信息,如果不需要身份驗(yàn)證可以為空</param> ?
? ? ? ? /// <returns></returns> ?
? ? ? ? public static HttpWebResponse CreatePostHttpResponse(string url,IDictionary<string,string> parameters,int? timeout, string userAgent,Encoding requestEncoding,CookieCollection cookies) ?
? ? ? ? { ?
? ? ? ? ? ? if (string.IsNullOrEmpty(url)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? throw new ArgumentNullException("url"); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if(requestEncoding==null) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? throw new ArgumentNullException("requestEncoding"); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? HttpWebRequest request=null; ?
? ? ? ? ? ? //如果是發(fā)送HTTPS請(qǐng)求 ?
? ? ? ? ? ? if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); ?
? ? ? ? ? ? ? ? request = WebRequest.Create(url) as HttpWebRequest; ?
? ? ? ? ? ? ? ? request.ProtocolVersion=HttpVersion.Version10; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? else?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request = WebRequest.Create(url) as HttpWebRequest; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? request.Method = "POST"; ?
? ? ? ? ? ? request.ContentType = "application/x-www-form-urlencoded"; ?
? ? ? ? ? ? ??
? ? ? ? ? ? if (!string.IsNullOrEmpty(userAgent)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.UserAgent = userAgent; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? else?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.UserAgent = DefaultUserAgent; ?
? ? ? ? ? ? } ?
?
? ? ? ? ? ? if (timeout.HasValue) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.Timeout = timeout.Value; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? if (cookies != null) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? request.CookieContainer = new CookieContainer(); ?
? ? ? ? ? ? ? ? request.CookieContainer.Add(cookies); ?
? ? ? ? ? ? } ?
? ? ? ? ? ? //如果需要POST數(shù)據(jù) ?
? ? ? ? ? ? if(!(parameters==null||parameters.Count==0)) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? StringBuilder buffer = new StringBuilder(); ?
? ? ? ? ? ? ? ? int i = 0; ?
? ? ? ? ? ? ? ? foreach (string key in parameters.Keys) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? if (i > 0) ?
? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? buffer.AppendFormat("&{0}={1}", key, parameters[key]); ?
? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? else?
? ? ? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? ? ? buffer.AppendFormat("{0}={1}", key, parameters[key]); ?
? ? ? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? i++; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? byte[] data = requestEncoding.GetBytes(buffer.ToString()); ?
? ? ? ? ? ? ? ? using (Stream stream = request.GetRequestStream()) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? stream.Write(data, 0, data.Length); ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? } ?
? ? ? ? ? ? return request.GetResponse() as HttpWebResponse; ?
? ? ? ? } ?
?
? ? ? ? private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) ?
? ? ? ? { ?
? ? ? ? ? ? return true; //總是接受 ?
? ? ? ? } ?
? ? } ?
}?
?從上面的代碼中可以看出POST數(shù)據(jù)到HTTP和HTTPS站點(diǎn)不同,POST數(shù)據(jù)到HTTPS站點(diǎn)的時(shí)候需要設(shè)置ServicePointManager類的ServerCertificateValidationCallback屬性,并且在POST到https://passport.baidu.com/?login時(shí)還需要將HttpWebResquest實(shí)例的ProtocolVersion屬性設(shè)置為HttpVersion.Version10(這個(gè)未驗(yàn)證是否所有的HTTPS站點(diǎn)都需要設(shè)置),否則在調(diào)用GetResponse()方法時(shí)會(huì)拋出“基礎(chǔ)連接已經(jīng)關(guān)閉: 連接被意外關(guān)閉。”的異常。
?
?用法舉例
?這個(gè)類用起來也很簡單:
?(1)POST數(shù)據(jù)到HTTPS站點(diǎn),用它來登錄百度:
?
string loginUrl = "https://passport.baidu.com/?login"; ?
string userName = "userName"; ?
string password = "password"; ?
string tagUrl = "http://cang.baidu.com/"+userName+"/tags"; ?
Encoding encoding = Encoding.GetEncoding("gb2312"); ?
?
IDictionary<string, string> parameters = new Dictionary<string, string>(); ?
parameters.Add("tpl", "fa"); ?
parameters.Add("tpl_reg", "fa"); ?
parameters.Add("u", tagUrl); ?
parameters.Add("psp_tt", "0"); ?
parameters.Add("username", userName); ?
parameters.Add("password", password); ?
parameters.Add("mem_pass", "1"); ?
HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, encoding, null); ?
string cookieString = response.Headers["Set-Cookie"];?
?(2)發(fā)送GET請(qǐng)求到HTTP站點(diǎn)
?在cookieString中包含了服務(wù)器端返回的會(huì)話信息數(shù)據(jù),從中提取了之后可以設(shè)置Cookie下次登錄時(shí)帶上這個(gè)Cookie就可以以認(rèn)證用戶的信息,假設(shè)我們已經(jīng)登錄成功并且獲取了Cookie,那么發(fā)送GET請(qǐng)求的代碼如下:
?
string userName = "userName"; ?
string tagUrl = "http://cang.baidu.com/"+userName+"/tags"; ?
CookieCollection cookies = new CookieCollection();//如何從response.Headers["Set-Cookie"];中獲取并設(shè)置CookieCollection的代碼略 ?
response = HttpWebResponseUtility.CreateGetHttpResponse(tagUrl, null, null, cookies); ?
?(3)發(fā)送POST請(qǐng)求到HTTP站點(diǎn)
?以登錄51CTO為例:
?
string loginUrl = "http://home.51cto.com/index.php?s=/Index/doLogin"; ?
string userName = "userName"; ?
string password = "password"; ?
?
IDictionary<string, string> parameters = new Dictionary<string, string>(); ?
parameters.Add("email", userName); ?
parameters.Add("passwd", password); ?
?
HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, Encoding.UTF8, null); ?
?在這里說句題外話,CSDN的登錄處理是由http://passport.csdn.net/ajax/accounthandler.ashx這個(gè)Handler來處理的。
?
?總結(jié)
在本文只是講解了在C#中發(fā)送請(qǐng)求到HTTP和HTTPS的用法,分GET/POST兩種方式,為減少一些繁瑣和機(jī)械的編碼,周公將其封裝為一個(gè)類,發(fā)送數(shù)據(jù)之后返回HttpWebResponse對(duì)象實(shí)例,利用這個(gè)實(shí)例我們可以獲取服務(wù)器端返回的Cookie以便用認(rèn)證用戶的身份繼續(xù)發(fā)送請(qǐng)求,或者讀取服務(wù)器端響應(yīng)的內(nèi)容,不過在讀取響應(yīng)內(nèi)容時(shí)要注意響應(yīng)格式和編碼,本來在這個(gè)類中還有讀取HTML和WML內(nèi)容的方法(包括服務(wù)器使用壓縮方式傳輸?shù)臄?shù)據(jù)),但限于篇幅和其它方面的原因,此處省略掉了。如有機(jī)會(huì),在以后的文章中會(huì)繼續(xù)講述這方面的內(nèi)容。
========

http協(xié)議post數(shù)據(jù)標(biāo)準(zhǔn)格式 ?

http://blog.163.com/wu_ernan/blog/static/2102880202014226102528240/


在C#中有HttpWebRequest類,可以很方便用來獲取http請(qǐng)求,但是這個(gè)類對(duì)Post方式?jīng)]有提供一個(gè)很方便的方法來獲取數(shù)據(jù)。網(wǎng)上有很多人提供了解決方法,但都參差不齊,這里我把我使用的方法總結(jié)出來,與大家分享。
?
本文精華:實(shí)現(xiàn)了post的時(shí)候即可以有字符串的key-value,還可以帶文件。
?
Post數(shù)據(jù)格式
?
Post提交數(shù)據(jù)的時(shí)候最重要就是把Key-Value的數(shù)據(jù)放到http請(qǐng)求流中,而HttpWebRequest沒有提供一個(gè)屬性之類的東西可以讓我們自由添加Key-Value,因此就必須手工構(gòu)造這個(gè)數(shù)據(jù)。
根據(jù)RFC 2045協(xié)議,一個(gè)Http Post的數(shù)據(jù)格式如下:
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--
詳細(xì)解釋如下:
Content-Type: multipart/form-data; boundary=AaB03x
?
如上面所示,首先聲明數(shù)據(jù)類型為multipart/form-data, 然后定義邊界字符串AaB03x,這個(gè)邊界字符串就是用來在下面來區(qū)分各個(gè)數(shù)據(jù)的,可以隨便定義,但是最好是用破折號(hào)等數(shù)據(jù)中一般不會(huì)出現(xiàn)的字符。然后是換行符。
注意:Post中定義的換行符是\r\n
--AaB03x
?
這個(gè)是邊界字符串,注意每一個(gè)邊界符前面都需要加2個(gè)連字符“--”,然后跟上換行符。
Content-Disposition: form-data; name="submit-name"
?
這里是Key-Value數(shù)據(jù)中字符串類型的數(shù)據(jù)。submit-name 是這個(gè)Key-Value數(shù)據(jù)中的Key。當(dāng)然也需要換行符。
Larry
?
這個(gè)就是剛才Key-Value數(shù)據(jù)中的value。
--AaB03x
?
邊界符,表示數(shù)據(jù)結(jié)束。
Content-Disposition: form-data; name="file"; filename="file1.dat"
?
這個(gè)代表另外一個(gè)數(shù)據(jù),它的key是file,文件名是file1.dat。 注意:最后面沒有分號(hào)了。
Content-Type: application/octet-stream
?
這個(gè)標(biāo)識(shí)文件類型。application/octet-stream表示二進(jìn)制數(shù)據(jù)。
... contents of file1.dat ...
?
這個(gè)是文件內(nèi)容??梢允苟M(jìn)制的數(shù)據(jù)。
--AaB03x--
?
數(shù)據(jù)結(jié)束后的分界符,注意因?yàn)檫@個(gè)后面沒有數(shù)據(jù)了所以需要在后面追加一個(gè)“--”表示結(jié)束。
C#下Post數(shù)據(jù)的函數(shù)
?
搞明白格式后,我們就很容易寫出C#的代碼了。如下所示:
private static string HttpPostData(string url, int timeOut, string fileKeyName,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? string filePath, NameValueCollection stringDict)
{
? ? string responseContent;
? ? var memStream = new MemoryStream();
? ? var webRequest = (HttpWebRequest)WebRequest.Create(url);
? ? // 邊界符
? ? var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
? ? // 邊界符
? ? var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
? ? var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
? ? // 最后的結(jié)束符
? ? var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");
?
? ? // 設(shè)置屬性
? ? webRequest.Method = "POST";
? ? webRequest.Timeout = timeOut;
? ? webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
?
? ? // 寫入文件
? ? const string filePartHeader =
? ? ? ? "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n"+
? ? ? ? ?"Content-Type: application/octet-stream\r\n\r\n";
? ? var header = string.Format(filePartHeader, fileKeyName, filePath);
? ? var headerbytes = Encoding.UTF8.GetBytes(header);
?
? ? memStream.Write(beginBoundary, 0, beginBoundary.Length);
? ? memStream.Write(headerbytes, 0, headerbytes.Length);
?
? ? var buffer = new byte[1024];
? ? int bytesRead; // =0
?
? ? while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
? ? {
? ? ? ? memStream.Write(buffer, 0, bytesRead);
? ? }
?
? ? // 寫入字符串的Key
? ? var stringKeyHeader = "\r\n--" + boundary +
? ? ? ? ? ? ? ? ? ? ? ? ? ?"\r\nContent-Disposition: form-data; name=\"{0}\""+
? ? ? ? ? ? ? ? ? ? ? ? ? ?"\r\n\r\n{1}\r\n";
?
? ? foreach (byte[] formitembytes in from string key in stringDict.Keys
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?select string.Format(stringKeyHeader, key, stringDict[key])
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?into formitem
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?select Encoding.UTF8.GetBytes(formitem))
? ? {
? ? ? ? memStream.Write(formitembytes, 0, formitembytes.Length);
? ? }
?
? ? // 寫入最后的結(jié)束邊界符
? ? memStream.Write(endBoundary, 0, endBoundary.Length);
?
? ? webRequest.ContentLength = memStream.Length;
?
? ? var requestStream = webRequest.GetRequestStream();
?
? ? memStream.Position = 0;
? ? var tempBuffer = new byte[memStream.Length];
? ? memStream.Read(tempBuffer, 0, tempBuffer.Length);
? ? memStream.Close();
?
? ? requestStream.Write(tempBuffer, 0, tempBuffer.Length);
? ? requestStream.Close();
?
? ? var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();
?
? ? using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Encoding.GetEncoding("utf-8")))
? ? {
? ? ? ? responseContent = httpStreamReader.ReadToEnd();
? ? }
?
? ? fileStream.Close();
? ? httpWebResponse.Close();
? ? webRequest.Abort();
?
? ? return responseContent;
}
參考資料
Rfc2045:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.
http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data
========

總結(jié)

以上是生活随笔為你收集整理的C# 操作http协议学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产精品久久久久久久电影 | 欧美精品久久久久久久免费 | 亚洲国产高清在线观看视频 | 中文字幕免费一区 | 日日夜夜精品视频天天综合网 | 91资源在线免费观看 | 免费看污的网站 | 热久久最新地址 | 日韩中文字幕国产 | 午夜视频播放 | 欧美日韩三级在线观看 | 日韩精品一区二区在线视频 | 天天se天天cao天天干 | 波多野结衣在线播放一区 | 999久久久欧美日韩黑人 | 国产成人精品一区二区三区福利 | 制服丝袜成人在线 | 久久99精品国产麻豆宅宅 | 深夜免费福利视频 | 色偷偷网站视频 | 国产精选视频 | 美女黄色网在线播放 | 99久久精品视频免费 | 黄色1级毛片 | 全久久久久久久久久久电影 | 最近高清中文字幕 | 婷婷综合久久 | 欧美另类人妖 | 国产亚州精品视频 | 91男人影院| 亚洲激情在线 | 欧美伦理一区二区 | 亚洲国产精品电影在线观看 | 中文字幕免费观看全部电影 | 久久久久久久久久久久久久电影 | 99免费观看视频 | 天堂网在线视频 | 视频在线一区 | 国产精品v a免费视频 | 91福利区一区二区三区 | 国产一级在线免费观看 | 国产成人精品一区一区一区 | 日韩有码在线播放 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 日日爽 | 粉嫩aⅴ一区二区三区 | 亚洲国产视频直播 | 天天射一射| 欧美日韩国产精品一区 | 欧美激情h | 免费网站在线观看成人 | 日韩视频中文字幕在线观看 | 四虎国产精品成人免费影视 | 日韩激情av在线 | 成人h动漫精品一区二 | 国产精品免费不卡 | 91九色免费视频 | 日本激情动作片免费看 | www.香蕉视频 | 久久久综合 | 久久亚洲欧美日韩精品专区 | 91久久久久久久一区二区 | www.com久久久 | 超碰激情在线 | 国产特级毛片aaaaaa高清 | 国产 亚洲 欧美 在线 | 激情综合中文娱乐网 | 最新日韩精品 | av青草| 成年人在线观看网站 | 国产精品久久久久三级 | 精品久久精品久久 | 91字幕| 91一区二区三区久久久久国产乱 | 在线一二区 | 亚洲欧美日韩国产一区二区 | 五月婷婷视频在线 | 人人澡人人爱 | 丝袜美腿一区 | 色婷婷综合成人av | 一区二区三区电影 | 国产 日韩 欧美 在线 | 国产黄色看片 | 又黄又爽又湿又无遮挡的在线视频 | 狠狠色狠狠色综合日日小说 | 激情综合狠狠 | 精品一区二区精品 | 99精品国产成人一区二区 | 国产视频日韩视频欧美视频 | 久草电影在线观看 | 天天婷婷 | 国产亚洲欧美一区 | 不卡精品| 人人插人人 | 色婷婷综合成人av | aⅴ精品av导航 | 91视频首页| 精品婷婷 | 中文字幕欧美三区 | 狠狠干综合 | 亚洲成人网在线 | 在线观看一| 国内精品久久久久久久久久久 | 免费av看片 | 五月婷色 | 色婷五月天 | 婷婷亚洲激情 | 在线观看黄网站 | 国产亚洲片 | 911精品美国片911久久久 | 久久综合狠狠综合久久狠狠色综合 | 成人综合免费 | 超碰人人超 | 蜜臀一区二区三区精品免费视频 | 日本特黄特色aaa大片免费 | 韩国在线一区 | 国产精品久久久久久久久久久久午夜 | 亚洲一级片在线观看 | 国产一级在线视频 | 国产玖玖在线 | 精品在线免费观看 | av在线亚洲天堂 | 在线导航福利 | 九九免费在线看完整版 | 日韩成人av在线 | 日产乱码一二三区别免费 | 黄色免费大片 | 青青河边草观看完整版高清 | 西西www4444大胆在线 | 一区中文字幕在线观看 | 特级毛片网 | 久久精品中文字幕免费mv | 婷婷精品国产一区二区三区日韩 | 欧美 日韩 久久 | 国产96视频| 国产中文字幕网 | 午夜久久影院 | 成人a在线 | 天天爽夜夜爽人人爽曰av | 久久精品久久久精品美女 | 国产精品久久久久久久免费 | 亚洲精品国产精品国 | 成人av地址 | 九九免费精品视频 | 青青草在久久免费久久免费 | 97狠狠操 | 国产天天爽 | 亚洲精品麻豆视频 | 国产精品久久久久久欧美 | 国产小视频在线免费观看视频 | 欧美成人一二区 | 日本黄区免费视频观看 | 久久久久久99精品 | www在线免费观看 | 国产涩涩在线观看 | 日本女人的性生活视频 | 国产不卡视频在线播放 | 国产精品国产三级国产aⅴ入口 | 狠狠狠色丁香婷婷综合激情 | 午夜 久久 tv | 美女福利视频一区二区 | 国产原创中文在线 | 色香蕉网 | 亚洲激情中文 | 久草在线视频在线观看 | 欧美一区二区三区四区夜夜大片 | 一区二区国产精品 | 91在线视频在线观看 | 日本资源中文字幕在线 | 有码视频在线观看 | www.日日操.com | 一级黄视频 | 97精品国产aⅴ | 黄色在线观看免费 | 天天操天天射天天插 | 美女天天操 | 丁香视频在线观看 | a视频在线观看免费 | 欧美精品一区二区在线播放 | 亚洲天天综合网 | 91激情视频在线 | 手机看片 | 久久久 精品 | 亚洲深爱激情 | 国产 在线 高清 精品 | 麻豆小视频在线观看 | 四虎最新域名 | 国产视频网站在线观看 | 在线观看国产一区二区 | 97碰碰视频| 亚洲视频精品在线 | 久久草网| 国产视频在线一区二区 | 国产精品久久久久久久久久久久午夜片 | 精品v亚洲v欧美v高清v | 亚洲综合在线五月 | 亚洲国产中文字幕在线视频综合 | 在线电影 一区 | 欧美日韩亚洲在线 | 欧美成人h版 | 久久久免费观看完整版 | 一区二区三区中文字幕在线 | 在线草| 欧美成人手机版 | 少妇做爰k8经典 | 91看片在线播放 | 日韩字幕 | 丁香六月天婷婷 | 久久兔费看a级 | 日韩精品不卡在线 | 国产黄色免费 | h动漫中文字幕 | 少妇搡bbbb搡bbb搡忠贞 | 国产在线更新 | 17婷婷久久www | 亚洲在线综合 | 亚洲精品一区二区三区四区高清 | 99久久国产免费,99久久国产免费大片 | 亚洲国产精品电影在线观看 | 99久久精品免费看国产免费软件 | 毛片一区二区 | 亚洲激精日韩激精欧美精品 | 9999国产精品 | 51久久成人国产精品麻豆 | 天天五月天色 | 波多野结衣理论片 | 亚洲无在线 | www91在线观看| 精品主播网红福利资源观看 | 久久一区二区三区超碰国产精品 | 最新av在线播放 | 国产91大片 | 久久深夜福利免费观看 | 日韩av播放在线 | 天堂av一区二区 | 97人人艹 | 超碰97国产 | 黄色免费国产 | 美女在线免费视频 | 丝袜美女在线 | 干干日日 | 欧美另类老妇 | 日日草天天草 | 婷婷久操| www激情网| 91色蜜桃| 久久艹艹 | 精品国产一区二区三区久久 | 91av手机在线 | 美女露久久 | 97精品在线观看 | 国产精品av在线 | 99国产一区 | 美女视频黄,久久 | 午夜久操 | 天天操天天操一操 | 中文字幕av最新 | 91看片淫黄大片一级在线观看 | 成人资源网 | 黄色91在线观看 | 久久精品波多野结衣 | 日韩高清一区在线 | 久久天天躁夜夜躁狠狠85麻豆 | 最新久久久| 99精品免费久久久久久日本 | 国产一级一级国产 | 日韩黄色大片在线观看 | 99久久精品免费看国产四区 | 精品亚洲午夜久久久久91 | 国产中文字幕一区二区 | 精品久久久久久一区二区里番 | 免费av大片 | 久久久2o19精品 | 色综合色综合色综合 | 精品久久一二三区 | 午夜精品久久久久久中宇69 | 毛片美女网站 | 日韩免费视频播放 | 果冻av在线| 国产精品久久久久一区二区三区共 | 久草久草视频 | 国产精品自产拍在线观看中文 | 色狠狠综合天天综合综合 | 在线精品亚洲一区二区 | 欧美在线一二区 | 国产精品一区二区三区在线看 | 久久国产福利 | 中文字幕乱码视频 | 免费日韩一区二区 | .国产精品成人自产拍在线观看6 | 久久综合久久综合这里只有精品 | 日本黄色免费大片 | 免费av影视| 国产精品一区二区62 | 久久国产精品久久精品 | 欧美精品久久久久久久免费 | 国产麻豆成人传媒免费观看 | 在线观看中文av | 日韩美视频 | 国产精品你懂的在线观看 | 国产黄色精品在线观看 | 色婷婷久久 | 亚洲高清视频在线观看免费 | 亚洲国产中文字幕在线观看 | 黄色网在线免费观看 | 成人宗合网 | 成人啪啪18免费游戏链接 | 1024久久 | 午夜手机电影 | 国产亚洲精品久久久久久电影 | 日韩欧美一区二区在线观看 | 色香天天 | 成人三级网站在线观看 | 亚洲第一av在线 | 免费视频久久久久 | 日韩久久午夜一级啪啪 | 在线观看中文字幕dvd播放 | 日韩中文字幕免费视频 | 曰本免费av | 中文字幕在线国产 | 久久精品首页 | 婷婷在线播放 | 国产成人一区二区三区久久精品 | 国产九九九精品视频 | 亚洲天天在线日亚洲洲精 | 草草草影院 | 国产在线无 | 又黄又爽又湿又无遮挡的在线视频 | 在线观看亚洲国产 | 国产成人99av超碰超爽 | 又污又黄网站 | 夜夜看av| 91精品免费在线视频 | 亚洲国产精品久久久久婷婷884 | 久久精品视频4 | 中文字幕av在线免费 | 欧美黄色高清 | 国产黄免费在线观看 | 国产精品视频99 | 91视频在线观看下载 | 男女日麻批 | 欧美一区免费在线观看 | 欧美精品一级视频 | 欧美少妇xxxxxx | 奇米网网址 | 天天天操操操 | 在线免费视频a | 在线91精品 | 日韩在线大片 | 中文字幕日韩电影 | 久久毛片网站 | 久久精品人| 99免费精品视频 | 久久久久久久99精品免费观看 | 在线免费观看黄色小说 | 免费福利片2019潦草影视午夜 | 日日爱夜夜爱 | 亚洲精品国产精品乱码在线观看 | av色网站 | 在线观看中文字幕2021 | 天天综合操 | 99久精品 | 欧美一级在线观看视频 | 91人人视频在线观看 | 在线一区观看 | 国产精品久久久久四虎 | 亚洲午夜久久久综合37日本 | 婷婷精品国产一区二区三区日韩 | 国产精品国产亚洲精品看不卡15 | 亚洲年轻女教师毛茸茸 | 激情综合色图 | 国产青草视频在线观看 | 欧美成人手机版 | 久草爱| 成人影视免费看 | 成人免费视频播放 | 日日操日日插 | 亚洲精品免费视频 | 超碰官网| 天天综合狠狠精品 | 成年人免费电影 | 亚洲精品黄色 | 99久久精品国产一区二区三区 | 一区二区三区精品在线视频 | 在线视频91 | 在线精品播放 | av九九九 | 99tvdz@gmail.com| 国产伦精品一区二区三区在线 | 日韩激情免费视频 | 日韩av片无码一区二区不卡电影 | 色七七亚洲影院 | 99精品视频在线播放免费 | 国产成人一区二区三区影院在线 | 中文字幕日本在线观看 | 五月婷在线播放 | 91精品1区| 国产999精品久久久久久麻豆 | 精品麻豆入口免费 | 久久精品一区二区三区四区 | 国产原创av在线 | 在线观看亚洲精品 | 色偷偷888欧美精品久久久 | 碰超人人 | 国产精品精品视频 | 超碰97人| av资源网在线播放 | 日韩电影久久 | 在线国产能看的 | 精品在线你懂的 | 九九九九免费视频 | 超碰在线观看99 | 国产成人精品综合 | 在线色吧| 美女视频黄,久久 | av片免费播放 | 又色又爽又激情的59视频 | 黄色成年 | 五月综合在线观看 | 国产精品丝袜 | 麻豆久久久久 | 亚洲妇女av | 精品国产自在精品国产精野外直播 | 91在线看视频免费 | 日韩欧美高清视频在线观看 | 色综合久久久久综合体 | 91av在线精品 | www操操操 | 蜜桃麻豆www久久囤产精品 | 色在线国产| 久草在线综合 | 中日韩在线视频 | 久久久天天操 | 久久久久伊人 | 激情深爱 | 久久精品影片 | 97在线观看视频免费 | 亚洲aⅴ乱码精品成人区 | 久久另类小说 | 日本中文字幕免费观看 | 日韩区在线观看 | 91亚洲精品久久久蜜桃借种 | 国产裸体无遮挡 | 欧美影院久久 | 久久新视频 | 久热av在线 | 久久线视频 | 中文字幕一区在线 | 日韩免费高清在线 | 亚洲一级电影在线观看 | 日韩最新在线 | 精品视频不卡 | 久久久麻豆精品一区二区 | 欧美成人猛片 | 久久九九视频 | 国产在线观看高清视频 | 91人人澡人人爽人人精品 | 91av久久| 日韩欧三级 | 人人爽人人爽人人爽人人爽 | 天天干,天天射,天天操,天天摸 | 国产精品12345| 91精品视频网站 | 日韩精品久久一区二区 | 亚洲一区二区高潮无套美女 | 91中文字幕永久在线 | 免费日韩 精品中文字幕视频在线 | 日韩精品一区二区在线观看视频 | 亚洲精品成人av在线 | 国产视频综合在线 | 国产麻豆视频免费观看 | 久久久久久久久久久影院 | 精品一区二区在线免费观看 | 久久久久久美女 | 中文字幕免费高清在线 | 天天艹天天 | 高潮毛片无遮挡高清免费 | 成人免费在线观看电影 | 亚洲第一区在线观看 | 成人欧美日韩国产 | 91色在线观看 | av解说在线 | 久久免费精品视频 | 久久99最新地址 | 久久国产午夜精品理论片最新版本 | 国产精品久久久久久久久久新婚 | 五月丁婷婷 | 国产一区二区影院 | 中文字幕在线视频第一页 | 成人黄色小说视频 | 91成年人在线观看 | 91网址在线 | 人人爱爱 | 婷婷丁香九月 | 国产精品嫩草影院123 | 久久精品99国产 | 国产精品美女久久久久久2018 | 日韩精品你懂的 | 国产精品自产拍在线观看桃花 | 欧美激情精品久久久久久免费 | 久久国产视频网站 | 久久久视频在线 | 成人a级网站| 久草影视在线观看 | 色婷婷综合在线 | 波多野结衣视频一区二区三区 | 啪一啪在线 | 日本公妇在线观看 | 亚洲狠狠操 | 伊人射| 国产美女视频一区 | 亚洲精品88欧美一区二区 | 色婷婷伊人 | 国产精品av在线 | 一本到视频在线观看 | 91视频在线播放视频 | 久草在线在线视频 | 精品久久久久久国产偷窥 | 97在线观看视频 | 国产精品一二 | 国内精品久久久久久久久久久 | 日韩精品一区二区免费 | 免费av网站在线 | 国产精品18久久久久白浆 | 国产精品一区在线观看你懂的 | 欧美人体xx | 欧美一区二区视频97 | 91久久国产露脸精品国产闺蜜 | 91精品一区二区三区久久久久久 | 国产精品久久久久久欧美 | 国产一区二区在线影院 | 美女国内精品自产拍在线播放 | 国产亚洲精品免费 | 在线播放视频一区 | 日韩xxxxxxxxx | 91精品一区二区三区蜜臀 | 日韩不卡高清视频 | 亚洲精品国产高清 | 天堂va在线高清一区 | 亚洲激精日韩激精欧美精品 | av片在线观看免费 | 中文字幕亚洲国产 | 日韩免费视频 | 国产午夜一区 | 色美女在线 | 欧美精品资源 | 99热在 | 中文字幕一区二区三区乱码不卡 | 一级片色播影院 | 日韩免费一区二区三区 | 久久久免费视频播放 | 国产精品大全 | 日本爱爱免费 | 日韩精品欧美一区 | 久久亚洲免费 | 国际精品网 | 在线免费观看视频a | 欧美 国产 视频 | 国产日韩中文字幕 | 国产精品成人国产乱 | 国产色就色 | 久久综合久久综合这里只有精品 | 精品一区二区三区在线播放 | 国产精品2019 | 六月丁香婷 | 综合久久网| 国产精品美女久久久久久久 | 国色天香av| 久久久免费毛片 | 99热这里是精品 | av中文字幕在线看 | 亚洲自拍av在线 | 米奇狠狠狠888 | 美国av大片 | 日本中出在线观看 | 91丨porny丨九色 | 久艹在线观看视频 | 91视频91色| 亚洲精品字幕 | 激情五月综合网 | 亚洲人视频在线 | 亚洲一区二区高潮无套美女 | www.午夜色.com| 精品 一区 在线 | 成人午夜性影院 | 日日碰夜夜爽 | 午夜18视频在线观看 | 成人一区不卡 | av黄色在线播放 | 中文字幕在线免费观看 | 亚洲国产中文字幕在线 | av资源免费在线观看 | 国产在线精品一区 | 97视频人人澡人人爽 | 欧美激情精品久久久久久免费 | 亚洲精品久久久久中文字幕二区 | 日本女人在线观看 | 激情网在线观看 | 中文超碰字幕 | 成人一级视频在线观看 | 欧美一区二区三区激情视频 | 久久伊人色综合 | 丝袜+亚洲+另类+欧美+变态 | 久久精品波多野结衣 | 在线韩国电影免费观影完整版 | 六月久久婷婷 | 中文av在线免费观看 | 91桃色国产在线播放 | 91试看 | 91视频 - v11av| 免费观看91| 久久精品美女视频 | 中文字幕在线播放日韩 | 免费日韩av电影 | 成人一区二区三区在线观看 | av电影亚洲| 国产在线91在线电影 | 成人小视频在线播放 | 亚洲精品国精品久久99热一 | 九九九九九九精品 | 成人永久免费 | 日本精品视频一区二区 | 欧美日韩性生活 | 99在线免费观看视频 | 国产三级久久久 | 99精品热 | 狠狠艹夜夜干 | 日韩中文字幕一区 | 日韩中文字幕亚洲一区二区va在线 | 日本高清中文字幕有码在线 | 欧洲黄色片 | 97精品超碰一区二区三区 | 亚洲国产中文在线 | 国产一区免费观看 | 91成人久久 | 日韩美在线 | 九九免费观看视频 | 337p西西人体大胆瓣开下部 | 日韩欧美v| 日韩欧美精品一区二区三区经典 | 亚洲国产人午在线一二区 | 日日精品| 国产欧美最新羞羞视频在线观看 | 天天操天天干天天摸 | 字幕网av| 91视频国产免费 | 欧美日韩中文字幕综合视频 | 久久久久久久久久久影院 | 色综合天天综合 | 91天天操| 精品久久久久一区二区国产 | 日韩久久一区 | 日韩av福利在线 | 青青五月天 | 五月激情丁香婷婷 | 国产精品亚洲视频 | 亚州国产精品 | 国产精品久久久久久久久婷婷 | 日韩在线不卡视频 | 国产视频第二页 | 免费观看福利视频 | 二区三区在线视频 | 亚洲人成影院在线 | 97韩国电影 | av亚洲产国偷v产偷v自拍小说 | 国产成人av网站 | 一级片视频免费观看 | 九九视频在线观看视频6 | 免费a级大片 | 国内精品视频在线 | 久久久久久蜜桃一区二区 | 亚洲精品中文在线 | 国产高清在线永久 | 日韩精品久久久久久 | 成 人 a v天堂| 夜色资源站wwwcom | 激情婷婷 | 丝袜av一区 | 香蕉视频日本 | 久久久免费视频播放 | av免费在线看网站 | 深夜免费福利在线 | 最近2019好看的中文字幕免费 | av性在线| 韩国av一区 | 精品国产观看 | 日日夜夜国产 | 高清av网站| 国产高清视频免费最新在线 | 日韩欧美一区二区三区免费观看 | 久久综合婷婷综合 | 欧美精品久久久久久久亚洲调教 | 97超碰人人模人人人爽人人爱 | 久久中文字幕在线视频 | 狠狠色狠狠色 | 高清视频一区二区三区 | 91视频在线免费下载 | 偷拍福利视频一区二区三区 | 国产成人精品女人久久久 | 在线观看a视频 | 亚洲老妇xxxxxx | 丁香五月亚洲综合在线 | 成人福利av | 亚洲人片在线观看 | 国产黄色免费观看 | 国产视频在线观看一区 | 香蕉97视频观看在线观看 | 免费h视频 | 国产啊v在线| 久草视频视频在线播放 | 国产视频精品久久 | 久久免费av | 99久久精品日本一区二区免费 | 欧美精品小视频 | 一区二区三区久久 | 天天干国产 | 国产精品美女久久久久久久 | 视频91 | 欧美贵妇性狂欢 | 欧美视频国产视频 | 麻豆高清免费国产一区 | 免费在线日韩 | 日韩精品 在线视频 | 亚洲va在线va天堂 | 欧美日韩一区二区三区在线观看视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 久久免费播放 | 亚洲精品福利视频 | 亚洲 欧洲 国产 精品 | 五月天堂网 | av在线看网站 | 日韩欧美综合视频 | 在线观看中文字幕亚洲 | 国产欧美精品在线观看 | av在线最新 | 96视频免费在线观看 | 69av视频在线 | 91.麻豆视频| 日韩免费三区 | 国产亚洲免费的视频看 | 日韩a在线 | 国产精品第一视频 | 久久久免费精品国产一区二区 | 国产精品99久久久精品 | 射久久 | 亚洲视频在线免费观看 | 国产一二三区在线观看 | 亚洲美女免费精品视频在线观看 | 日韩av伦理片 | 国产小视频国产精品 | 视频99爱| 免费看在线看www777 | 亚洲黄色在线观看 | 日韩videos | 狠狠色丁香久久婷婷综合_中 | 天天av天天 | 三级av片| 91成人在线观看喷潮 | 97国产小视频 | 99这里只有精品视频 | 久久国精品 | 国产尤物视频在线 | 国产精品观看在线亚洲人成网 | 日韩资源在线观看 | 国产午夜精品一区二区三区嫩草 | 午夜av网站 | 在线观看第一页 | 国产精品久久99 | 久久在线 | 一区二区三区在线观看免费视频 | 99久久精品国产亚洲 | 亚洲精品国偷自产在线91正片 | 娇妻呻吟一区二区三区 | 91超碰免费在线 | 在线观看视频中文字幕 | 亚洲国产伊人 | 天天草天天色 | www五月 | 国产成人av网 | 国产小视频在线免费观看视频 | 二区三区在线 | 激情五月播播久久久精品 | 伊人资源视频在线 | 亚洲精品欧洲精品 | 日韩有码欧美 | 青青河边草免费视频 | 色综合久久88色综合天天人守婷 | 久久久久国产精品www | 婷色在线 | 亚洲精品乱码久久久久 | 亚洲精区二区三区四区麻豆 | 国产一区二区久久久久 | 免费黄色av. | 91视频专区| 欧美日韩免费在线视频 | 看片在线亚洲 | 亚洲第一区精品 | 久久精品99久久久久久2456 | 免费精品视频在线观看 | 亚洲精品日韩一区二区电影 | 亚洲精品在线视频观看 | 丰满少妇久久久 | 日韩高清在线不卡 | 免费黄av| 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | av日韩不卡 | 又大又硬又黄又爽视频在线观看 | 久久免费在线观看 | 久久成人人人人精品欧 | 欧美日在线观看 | 色永久免费视频 | 中文字幕免费在线看 | 免费看黄色毛片 | 中文字幕欧美三区 | 国产第一页在线观看 | 久久亚洲影院 | 欧美超碰在线 | 狠狠操.com | 一级免费黄视频 | 网站免费黄 | 狠狠插狠狠干 | av黄色在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 久久影院精品 | 中文字幕在线观看资源 | 免费精品人在线二线三线 | 亚洲国产97在线精品一区 | 国产99久久九九精品免费 | 免费看三片| 中文字幕亚洲综合久久五月天色无吗'' | 五月激情丁香婷婷 | 久久久久久久久久久影视 | 国产高清精 | 免费a视频在线观看 | 99r在线观看 | 中文在线免费一区三区 | 国产一级二级视频 | 伊人伊成久久人综合网站 | 不卡av免费在线观看 | 激情综合五月婷婷 | 天天射天天爱天天干 | 久色婷婷 | 亚洲黄色在线播放 | 在线国产99 | 久久黄色网址 | 国产精品爽爽久久久久久蜜臀 | 毛片网在线播放 | 麻豆视频在线免费看 | 精品久久久久久国产91 | 亚洲综合一区二区精品导航 | 黄色录像av | 成人动漫视频在线 | 97超碰站 | 日韩午夜高清 | 国产精品11 | 美女视频黄是免费的 | 久草成人在线 | 韩国av一区二区三区 | 开心激情综合网 | 人人超碰在线 | 天天干天天天 | 久久精品视频4 | 日韩午夜av电影 | 一区二区影视 | 草久草久 | 日韩中文在线观看 | 亚洲午夜精品久久久久久久久久久久 | 日韩黄色在线观看 | 91禁在线看| 五月婷网站 | 精品国产美女在线 | 日韩高清一区二区 | 中文网丁香综合网 | 国产大陆亚洲精品国产 | 久草在线视频网 | 久久久久久久久久久久99 | 国产国产人免费人成免费视频 | 日韩午夜在线播放 | 国产看片免费 | 亚洲国产日韩一区 | 新版资源中文在线观看 | 国产精品美女免费 | 国产成人1区 | 欧美国产三区 | 99久久久久| 91久久奴性调教 | 波多野结衣一区二区三区中文字幕 | 97超碰人人模人人人爽人人爱 | 97国产在线观看 | 亚洲国产av精品毛片鲁大师 | 国产精品久久久久一区二区三区共 | 亚洲黄色在线 | 黄色中文字幕在线 | 中国一级特黄毛片大片久久 | 探花系列在线 | 久久色视频 | 高清中文字幕av | 国产99黄 | 亚洲成熟女人毛片在线 | 一级片免费观看 | 日本福利视频在线 | 欧美精品一区在线发布 | 国产福利电影网址 | 国产一级电影免费观看 | 国产区高清在线 | 久久99精品国产99久久6尤 | 91av在线免费看 | 日韩免费看 | 日本高清xxxx | 欧美国产日韩久久 | 夜夜躁日日躁狠狠躁 | 精品国产精品国产偷麻豆 | 国产成人精品网站 | 97操操| 久久视频国产 | 日韩av播放在线 | 久久www免费视频 | 91久久人澡人人添人人爽欧美 | 91在线视频免费 | 天天舔天天射天天操 | 麻豆va一区二区三区久久浪 | 日批网站免费观看 | av片在线观看免费 | 99精品视频在线观看免费 | 色婷婷亚洲 | 午夜视频在线观看一区二区三区 | 美女黄久久 | 一区在线免费观看 | 日韩av高清在线观看 | 日韩亚洲国产精品 | 久久天| 99视| 91九色网址| 国产又粗又猛又黄又爽 | www.日日日.com | 激情五月婷婷综合网 | 久久国精品| 黄色大片中国 | 亚洲一区二区视频 | 国产精品成人自产拍在线观看 | 国产黄色免费看 | 久久久网站 | 尤物九九久久国产精品的分类 | 五月综合激情婷婷 | 久久夜av | 五月婷婷综合激情 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人av高清| 欧美一二三视频 | 亚洲国产理论片 | 91欧美在线| 狠狠色噜噜狠狠狠狠 | 午夜国产福利在线 | 国产女人40精品一区毛片视频 | 免费高清男女打扑克视频 | 国产第一页精品 | 一区二区精品在线视频 | 日韩精品免费在线观看视频 | 三上悠亚一区二区在线观看 | 久久九精品 | 国产无遮挡又黄又爽在线观看 | 国产精品国产三级国产aⅴ无密码 | 久久国产欧美日韩精品 | 99热这里精品 | 中文字幕av在线播放 | 国产馆在线播放 | 91丨九色丨国产在线观看 | 久久久久久伊人 | 日韩精品视频免费专区在线播放 | 国产精品久久久久久久久久久久冷 | 日韩艹 | 色狠狠狠 | 国产不卡在线 | 91热| 亚洲精品在线免费 | 久久色中文字幕 | 亚洲精品欧美精品 | 日韩,精品电影 | 在线免费观看黄网站 | 玖玖精品在线 | 精品国产一区二区三区久久影院 | 免费激情在线电影 | 亚洲久草视频 | 青青色影院 | 超碰97国产精品人人cao | 免费看片成年人 | 97在线精品视频 | 青青河边草观看完整版高清 | 久久久久久久久电影 | 亚洲精品免费在线视频 | 精品一区电影国产 | 日韩乱码中文字幕 | 超碰在线1 | 香蕉97视频观看在线观看 | 日本精品久久久久 | av在线之家电影网站 | 国产精品igao视频网网址 | 日韩高清激情 |