① httpwebrequest默認是什麼方式請求
HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.jb51.net?hl=zh-CN" );
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
//在這里對接收到的頁面內容進行處理
}
使用 GET 方式提交中文數據。
GET 方式通過在網路地址中附加參數來完成數據提交,對於中文的編碼,常用的有 gb2312 和 utf8 兩種。
用 gb2312 方式編碼訪問的程序代碼如下:
復制代碼代碼如下:
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string address = "http://www.jb51.net/?" + HttpUtility.UrlEncode("參數一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
//在這里對接收到的頁面內容進行處理
}
在上面的程序代碼中,我們以 GET 方式訪問了網址 http://www.jb51.net ,傳遞了參數「參數一=值一」,由於無法告知對方提交數據的編碼類型,所以編碼方式要以對方的網站為標准。
POST 方式:
POST 方式通過在頁面內容中填寫參數的方法來完成數據的提交,參數的格式和 GET 方式一樣,是類似於 hl=zh-CN&newwindow=1 這樣的結構。
程序代碼如下:
復制代碼代碼如下:
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())
{
//在這里對接收到的頁面內容進行處理
}
在上面的代碼中,我們訪問了 http://www.jb51.net 的網址,分別以 GET 和 POST 方式提交了數據,並接收了返回的頁面內容。然而,如果提交的參數中含有中文,那麼這樣的處理是不夠的,需要對其進行編碼,讓對方網站能夠識別。
使用 POST 方式提交中文數據
POST 方式通過在頁面內容中填寫參數的方法來完成數據的提交,由於提交的參數中可以說明使用的編碼方式,所以理論上能獲得更大的兼容性。
用 gb2312 方式編碼訪問的程序代碼如下:
復制代碼代碼如下:
Encoding myEncoding = Encoding.GetEncoding("gb2312");
string param = HttpUtility.UrlEncode("參數一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding) + "&" + HttpUtility.UrlEncode("參數二", 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())
{
//在這里對接收到的頁面內容進行處理
}
從上面的代碼可以看出, POST 中文數據的時候,先使用 UrlEncode 方法將中文字元轉換為編碼後的 ASCII 碼,然後提交到伺服器,提交的時候可以說明編碼的方式,用來使對方伺服器能夠正確的解析。
用C#語言寫的關於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>
/// 獲取網址HTML
/// </summary>
/// <param name="URL">網址 </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>
/// 獲取網站cookie
/// </summary>
/// <param name="URL">網址 </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">伺服器地址 </param>
/// <param name="URL">網址 </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">網址 </param>
/// <param name="cookie">cookies </param>
/// <param name="header">句柄 </param>
/// <param name="server">伺服器 </param>
/// <param name="val">伺服器 </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網址 </param>
/// <param name="cookie">cookie </param>
/// <param name="header">句柄 </param>
/// <param name="server">伺服器地址 </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;
}
}
}
② Web客戶(即瀏覽器)如何從web伺服器請求Web頁面,以及伺服器如何把Web頁面傳送給客戶
好像不能。
③ 網頁請求有多少種錯誤
HTTP是超文本傳輸協議,其定義了客戶端與伺服器端之間文本傳輸的規范。HTTP默認使用80埠,這個埠指的是服務端的埠,而客戶端使用的埠是動態分配的。當我們沒有指定埠訪問時,瀏覽器會默認幫我們添加80埠。我們也可以自己指定訪問埠如:http://www.ip138.com:80。 需要注意的是,現在大多數訪問都使用了HTTPS協議,而HTTPS的默認埠為443,如果使用80埠訪問HTTPS協議的伺服器可能會被拒絕。
主要特點
1、無連接
無連接的含義是限制每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
2、無狀態
HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在伺服器不需要先前信息時它的應答就較快。
3、簡單快速
客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯系的類型不同。由於HTTP協議簡單,使得HTTP伺服器的程序規模小,因而通信速度很快。
4、靈活
HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
5、支持B/S及C/S模式
④ Web頁面中如何利用錨點發送http請求
#後面不跳轉 只做JAVASCRIPT腳本調用
⑤ javaweb項目中,如何在jsp頁面發出一個請求,然後到java代碼中每隔1秒訪問一次資料庫的方法,要詳解,謝謝
可以寫個for循環 然後每次Thread.sleep(1000);這樣就每隔1s執行1次
⑥ 簡述ASP.NET頁面與WEB伺服器的交互過程
用戶請求頁面。(使用 HTTP GET 方法請求頁面。)頁面第一次運行,執行初步處理(如果您已通過編程讓它執行初步處理)。
頁面將標記動態呈現到瀏覽器,用戶看到的網頁類似於其他任何網頁。
用戶鍵入信息或從可用選項中進行選擇,然後單擊按鈕。(如果用戶單擊鏈接而不是按鈕,頁面可能僅僅定位到另一頁,而第一頁不會被進一步處理。)
頁面發送到 Web 伺服器。(瀏覽器執行 HTTP POST 方法,該方法在 ASP.NET 中稱為「回發」。)更明確地說,頁面發送回其自身。例如,如果用戶正在使用 Default.aspx 頁面,則單擊該頁上的某個按鈕可以將該頁發送回伺服器,發送的目標則是 Default.aspx。
在 Web 伺服器上,該頁再次運行。並且可在頁上使用用戶鍵入或選擇的信息。
頁面執行您通過編程所要實行的操作。
頁面將其自身呈現回瀏覽器。
與桌面應用程序中的窗體不同,ASP.NET 網頁在用戶使用窗體時不會啟動或運行,並且僅當用戶單擊「關閉」按鈕時才會卸載。這是由於 Web 具有斷開連接的天性。瀏覽器從 Web 伺服器請求頁面時,瀏覽器和伺服器相連的時間僅夠處理請求。Web 伺服器將頁面呈現到瀏覽器之後,連接即終止。如果瀏覽器對同一 Web 伺服器發出另一個請求,則即使是對同一個頁面發出的,該請求仍會作為新請求來處理。
Web 這種斷開連接的天性決定了 ASP.NET 頁的運行方式。用戶請求 ASP.NET 網頁時,將創建該頁的新實例。該頁執行其處理,將標記呈現到瀏覽器,然後該頁被丟棄。如果用戶單擊按鈕以執行回發,將創建該頁的新實例;該頁執行其處理,然後再次被丟棄。這樣,每個回發和往返行程都會導致生成該頁的一個新實例。
⑦ 請求web伺服器數據時有多種方法,其中哪種方法功能最全
如果數據量很多,比如存取「很多人」的留言和其他相關信息。這樣xml標簽代碼量自然會很多,逐個遍歷所用的時間肯定較長,所以這個時候資料庫就能快點,對於頻繁操作數據源的,自然使用資料庫的連接池功能。
⑧ c# httpwebrequest循環請求網頁
兩種方法都可以~~
利於 HttpWebRquest 返回的是字元串~~ 裡面是該網頁的源碼~~ 要想到的它裡面的超級鏈接不難~ 可以利於正則表達式分析並讀取~~ 當然,你也可以自己判斷~~
而使用 WebBrowser 可能更直觀一些~~ 這時候需要進行 DOM 操作了~~
究竟使用哪種方法,就看你更熟悉哪個了。。
而至於要實現循環請求~~~ 則可以使用遞歸技術~~
⑨ 如何通過瀏覽器發送webservice請求
方法/步驟 在進行webservice客戶端開發時,首先需要獲取到服務端的webservice服務地址,根據服務地址以及通訊協議創建對應的客戶端請求。如果對方提供的是一個服務地址,可以通過瀏覽器將復制粘貼進去。從頁面上可以看出這是一個基於axis框架生成的一個webservice服務端。 在服務端地址後面加上「?wsdl」(注意是英文的問號),在頁面中就可以看到服務端公布出來的各種服務、命名空間等其他信息。通過element可以看出,服務端公布出來兩個方法:sayHello和sayNo。後面帶有Response的說明是服務端返回的信息。 根據服務端提供的地址,在soapUI工具上創建webservice客戶端請求。打開soapUI軟體,在軟體的左上角點擊file文件,在彈出頁面中有三種方式,一般新增的使用第一種new soapUI project新建一個soapUI項目。 點擊新建soapUI項目之後,在彈出框中,需要輸入服務端的地址(注意地址後面要加上"?wsdl"英文符號),Project Name項目名稱可以有漢字,能夠自己區分是哪個服務端的項目即可。其他的值選擇默認即可,不需要勾選其他選項,點擊Ok即可創建好項目。 服務端方法公布展示。通過服務端的地址,創建一個soap項目之後,soapUI就自動解析服務端提供的方法介面。從示例中可以看出這個服務對外提供了兩個服務介面sayHello和sayNo。 點開其中的Request 1可以看到這個請求的報文信息以及這個請求需要的參數和參數類型。消息的報文頭信息和命名空間已經通過soapUI工具自動生成,在發送報文的時候只需要填寫必要的入參即可。 模擬客戶端發送請求。在客戶端輸入需要的參數之後,點擊左上角的「發送」按鈕就可以模擬客戶端請求發送。發送完成後,在右側就可以看到服務端返回的信息,這就是整個消息發送請求和返回的全流程。 wsdl文件方式的處理。對於有些服務端提供的不是類似上面的地址伺服器,而是一些wsdl文件的方式。打開wsdl文件可以看到和在瀏覽器中打開服務端地址展示的內容相同,只是提供的方式不同而已。文件的格式可以是xml或者是wsdl的格式。 通過wsdl文件內容創建project。點擊File文件下面的「creates a new soapUI project「。通過選擇一個文件的方式,就可以根據wsdl報文內容的方式創建客戶端。 點擊右側的Browse瀏覽按鈕,找到wsdl文件文件,這個文件的後綴可以是wsdl的方式也可以是xml的方式,然後點擊打開即可將文件導入到soapUI中,和服務地址類似,輸入項目的名稱,其他默認,點擊OK即可創建成功。 MyService是通過服務地址的方式創建,MyService2222是通過wsdl文件內容的方式創建的。通過比對可以看出,這兩種方式創建的客戶端是一致的。同樣解析出sayHello和sayNo服務。 END 注意事項 服務端地址後面添加的「?wsdl」必須要求是英文的問號 通過文件(後綴wsdl或者xml)的方式創建的時候,要保障文件頭沒有多餘的空格空行。
⑩ 在AIOHTTP中,向web服務發送http請求。有哪三種參
URL參數,表單參數,JSON參數。
URL參數這是一種比較簡單的URL參數,參數可以直接拼接在URL後面,問好前面是介面請求的地址,後面是傳遞的參數,可以是多個,用&連接。表單參數,在提交請求的時候,需要寫Content-Type,urlencoded類型一般在發送文章,博客的時候,採取這種參數。JSON參數,這個使用也非常廣泛。因為json是一個輕量級的數據存儲結構,而且讀取數據也非常快。在現在web開發中非常普及,github也採用這種方式。
URL參數優點,簡單,頁面跳轉比較快。缺點,get方法的拼接長度有可能很長,但是瀏覽器對這個長度是有限制的不能超過2048k,還有個缺點是參數是明文傳遞,明文就代表不安全。