欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#使用webclient下載圖片時出現(xiàn)“遠程服務(wù)器返回錯誤:(403)已禁止”提示

admin
2023年5月23日 9:13 本文熱度 1337

在一次爬蟲下載圖片的過程中,遇到服務(wù)器返回403,然后尋找解決辦法,解決辦法如下:

1、一般造成403的原因是權(quán)限設(shè)置問題,也就是沒有權(quán)限造成的,因此這里直接添加信任權(quán)限即可:

webclient.Credentials = CredentialCache.DefaultCredentials; // 添加授權(quán)證書

2、分析Reques tHeaders:

可以看到在requet中,有host,cookie等需要設(shè)置的內(nèi)容,因此加上相應(yīng)的內(nèi)容即可,給webclient添加頭信息:

WebClient mywebclient = new WebClient();

mywebclient.Credentials = CredentialCache.DefaultCredentials; // 添加授權(quán)證書

mywebclient.Headers.Add("User-Agent""Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36");

mywebclient.Headers.Add("Host""biz.touchev.com");

mywebclient.Headers.Add("Cookie""UM_distinctid=16bb1d9972eab2-0ec4ae521bb726-3e385b04-1fa400-16bb1d9972f9b8; PHPSESSID=upN0hwQw8FlkIm_Y7uegI45AB8qRVRDS7yq-YGrQ5o6mm6Hc_BSqQg7hNLQ6sr8x; Hm_lvt_6dba01603aa724759d9c4ea0dddd9b72=1562056956,1562816935; CNZZDATA1273105019=948668930-1562055616-%7C1562909757; Hm_lpvt_6dba01603aa724759d9c4ea0dddd9b72=1562914189");

mywebclient.DownloadFile(url, desPath);


運行,ok~


該文章在 2023/5/23 9:19:49 編輯過

全部評論1

admin
2023年5月23日 9:14
 題外知識:

有關(guān)HTTP頭完整、詳細的說明,請參見 http://www.w3.org/Protocols/ 的HTTP規(guī)范。

1. RequestHeader分析:

Accept:瀏覽器可接受的MIME類型。    

Accept-Charset:瀏覽器可接受的字符集。   

Accept-Encoding:瀏覽器能夠進行解碼的數(shù)據(jù)編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。

Accept-Language:瀏覽器所希望的語言種類,當服務(wù)器能夠提供一種以上的語言版本時要用到。     Authorization:授權(quán)信息,通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中。        

Connection:表示是否需要持久連接。如果Servlet看到這里的值為“Keep-Alive”,或者看到請求使用的是HTTP   1.1(HTTP   1.1默認進行持久連接),它就可以利用持久連接的優(yōu)點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現(xiàn)這一點,Servlet需要在應(yīng)答中發(fā)送一個Content-Length頭,最簡單的實現(xiàn)方法是:先把內(nèi)容寫入ByteArrayOutputStream,然后在正式寫出內(nèi)容之前計算它的大小。   

Content-Length:表示請求消息正文的長度。   

Cookie:這是最重要的請求頭信息之一   

from:請求發(fā)送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。   

Host:初始URL中的主機和端口。   

If-Modified-Since:只有當所請求的內(nèi)容在指定的日期之后又經(jīng)過修改才返回它,否則返回304“Not  Modified”應(yīng)答。   

Pragma:指定“no-cache”值表示服務(wù)器必須返回一個刷新后的文檔,即使它是代理服務(wù)器而且已經(jīng)有了頁面的本地拷貝。   

Referer:包含一個URL,用戶從該URL代表的頁面出發(fā)訪問當前請求的頁面。   

User-Agent:瀏覽器類型,如果Servlet返回的內(nèi)容與瀏覽器類型有關(guān)則該值非常有用。   

UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發(fā)送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統(tǒng)和CPU類型。  

每個標頭獨占一行, 最后必須要有一個空行。有關(guān)HTTP頭完整、詳細的說明,請參見http://www.w3.org/Protocols/的HTTP規(guī)范。

2.webclient保持session和cookie的方法

https://www.cnblogs.com/anjou/archive/2008/05/25/1206832.html

有些朋友說 WebClient 不能保持 Session 和 Cookie,只有 HttpWebRequest 才能保持 Session。實際上我們只要重寫 WebClient 的 GetWebRequest 方法就可以使 WebClient 保持 Session 和 Cookie。

下面是 HttpClient 類, 它繼承自 WebClient,并重寫了 GetWebRequest 方法。關(guān)鍵是要定義一個 Cookie 容器(紅色代碼部分):

  1. /// <summary>
  2. /// 支持 Session 和 Cookie 的 WebClient。
  3. /// </summary>
  4. public class HttpClient : WebClient
  5. {
  6. // Cookie 容器
  7. private CookieContainer cookieContainer;
  8. /// <summary>
  9. /// 創(chuàng)建一個新的 WebClient 實例。
  10. /// </summary>
  11. public HttpClient()
  12. {
  13. this.cookieContainer = new CookieContainer();
  14. }
  15. /// <summary>
  16. /// 創(chuàng)建一個新的 WebClient 實例。
  17. /// </summary>
  18. /// <param name="cookie">Cookie 容器</param>
  19. public HttpClient(CookieContainer cookies)
  20. {
  21. this.cookieContainer = cookies;
  22. }
  23. /// <summary>
  24. /// Cookie 容器
  25. /// </summary>
  26. public CookieContainer Cookies
  27. {
  28. get { return this.cookieContainer; }
  29. set { this.cookieContainer = value; }
  30. }
  31. /// <summary>
  32. /// 返回帶有 Cookie 的 HttpWebRequest。
  33. /// </summary>
  34. /// <param name="address"></param>
  35. /// <returns></returns>
  36. protected override WebRequest GetWebRequest(Uri address)
  37. {
  38. WebRequest request = base.GetWebRequest(address);
  39. if (request is HttpWebRequest)
  40. {
  41. HttpWebRequest httpRequest = request as HttpWebRequest;
  42. httpRequest.CookieContainer = cookieContainer;
  43. }
  44. return request;
  45. }
  46. #region 封裝了PostData, GetSrc 和 GetFile 方法
  47. /// <summary>
  48. /// 向指定的 URL POST 數(shù)據(jù),并返回頁面
  49. /// </summary>
  50. /// <param name="uriString">POST URL</param>
  51. /// <param name="postString">POST 的 數(shù)據(jù)</param>
  52. /// <param name="postStringEncoding">POST 數(shù)據(jù)的 CharSet</param>
  53. /// <param name="dataEncoding">頁面的 CharSet</param>
  54. /// <returns>頁面的源文件</returns>
  55. public string PostData(string uriString, string postString, string postStringEncoding, string dataEncoding, out string msg)
  56. {
  57. try
  58. {
  59. // 將 Post 字符串轉(zhuǎn)換成字節(jié)數(shù)組
  60. byte[] postData = Encoding.GetEncoding(postStringEncoding).GetBytes(postString);
  61. this.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
  62. // 上傳數(shù)據(jù),返回頁面的字節(jié)數(shù)組
  63. byte[] responseData = this.UploadData(uriString, "POST", postData);
  64. // 將返回的將字節(jié)數(shù)組轉(zhuǎn)換成字符串(HTML);
  65. string srcString = Encoding.GetEncoding(dataEncoding).GetString(responseData);
  66. srcString = srcString.Replace("\t", "");
  67. srcString = srcString.Replace("\r", "");
  68. srcString = srcString.Replace("\n", "");
  69. msg = string.Empty;
  70. return srcString;
  71. }
  72. catch (WebException we)
  73. {
  74. msg = we.Message;
  75. return string.Empty;
  76. }
  77. }
  78. /// <summary>
  79. /// 獲得指定 URL 的源文件
  80. /// </summary>
  81. /// <param name="uriString">頁面 URL</param>
  82. /// <param name="dataEncoding">頁面的 CharSet</param>
  83. /// <returns>頁面的源文件</returns>
  84. public string GetSrc(string uriString, string dataEncoding, out string msg)
  85. {
  86. try
  87. {
  88. // 返回頁面的字節(jié)數(shù)組
  89. byte[] responseData = this.DownloadData(uriString);
  90. // 將返回的將字節(jié)數(shù)組轉(zhuǎn)換成字符串(HTML);
  91. string srcString = Encoding.GetEncoding(dataEncoding).GetString(responseData);
  92. srcString = srcString.Replace("\t", "");
  93. srcString = srcString.Replace("\r", "");
  94. srcString = srcString.Replace("\n", "");
  95. msg = string.Empty;
  96. return srcString;
  97. }
  98. catch (WebException we)
  99. {
  100. msg = we.Message;
  101. return string.Empty;
  102. }
  103. }
  104. /// <summary>
  105. /// 從指定的 URL 下載文件到本地
  106. /// </summary>
  107. /// <param name="uriString">文件 URL</param>
  108. /// <param name="fileName">本地文件的完成路徑</param>
  109. /// <returns></returns>
  110. public bool GetFile(string urlString, string fileName, out string msg)
  111. {
  112. try
  113. {
  114. this.DownloadFile(urlString, fileName);
  115. msg = string.Empty;
  116. return true;
  117. }
  118. catch (WebException we)
  119. {
  120. msg = we.Message;
  121. return false;
  122. }
  123. }
  124. #endregion
  125. }
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved