Tôi làm việc trong văn phòng yêu cầu tất cả các kết nối được thực hiện thông qua một proxy http cụ thể. Tôi cần viết một ứng dụng đơn giản để truy vấn một số giá trị từ máy chủ web - thật dễ dàng nếu không có proxy. Làm thế nào tôi có thể làm cho ứng dụng C# nhận biết proxy? Làm thế nào tôi có thể thực hiện bất kỳ loại kết nối thông qua một proxy?C# Kết nối thông qua Proxy
Trả lời
Điều này có thể dễ dàng đạt được theo lập trình, trong mã của bạn hoặc khai báo trong web.config hoặc app.config.
Bạn có thể lập trình tạo ra một proxy như sau:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]);
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Bạn đang cơ bản gán đối tượng WebProxy
đến tài sản proxy
các request
của đối tượng. Điều này request
sau đó sẽ sử dụng proxy
bạn xác định.
Để đạt được điều tương tự khai báo, bạn có thể làm như sau:
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://[your proxy address and port number]"
bypassonlocal="false"
/>
</defaultProxy>
</system.net>
trong web.config hoặc app.config của bạn. Điều này đặt proxy mặc định mà tất cả các yêu cầu http sẽ sử dụng. Tùy thuộc vào chính xác những gì bạn cần để đạt được, bạn có thể hoặc không thể yêu cầu một số thuộc tính bổ sung của phần tử defaultProxy/proxy, vì vậy vui lòng tham khảo tài liệu về các yếu tố đó.
Nếu bạn đang sử dụng WebClient
, tài khoản này có thuộc tính Proxy mà bạn có thể sử dụng.
Như khác đã đề cập, có một số cách để tự động thiết lập Proxy phát hiện/sử dụng
Web.Config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
Sử dụng lớp WebProxy như mô tả trong this article.
Bạn cũng có thể cấu hình trực tiếp cài đặt proxy (cấu hình hoặc mã) và sau đó ứng dụng của bạn sẽ sử dụng chúng.
Web.Config:
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://[proxy address]:[proxy port]"
bypassonlocal="false"
/>
</defaultProxy>
</system.net>
Code:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false);
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
Nếu bạn muốn ứng dụng để sử dụng proxy mặc định hệ thống, thêm video này vào Application.exe.config của bạn (nơi application.exe là tên ứng dụng của bạn):
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
Chi tiết khác có thể tìm thấy trong số MSDN article on System.Net
Tự động phát hiện proxy là quá trình mà máy chủ proxy Web được xác định bởi hệ thống và được sử dụng để gửi yêu cầu thay mặt cho khách hàng. Tính năng này còn được gọi là Tự động phát hiện proxy web (WPAD). Khi tính năng phát hiện proxy tự động được bật, hệ thống tìm cách xác định tập lệnh cấu hình proxy có trách nhiệm trả về bộ proxy có thể được sử dụng cho yêu cầu.
Cách này trả lời câu hỏi? OP có thể đưa thông tin này vào sử dụng như thế nào? – Cullub
Mã này đã làm việc cho tôi:
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
Hãy thử mã này. Gọi trước khi thực hiện bất kỳ yêu cầu http nào. Mã sẽ sử dụng proxy từ Cài đặt Internet Explorer của bạn - một điều mặc dù, tôi sử dụng proxy.Credentials = ....
vì máy chủ proxy của tôi là Máy chủ tăng tốc Internet được xác thực NTLM. Cho nó một whiz.
static void setProxy()
{
WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy();
if(proxy.Address != null)
{
proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials);
}
}
'WebProxy.GetDefaultProxy' đã lỗi thời kể từ Framework 4.5 và phương thức này trả về null. Suy nghĩ tốt hơn trước khi sử dụng 'CredentialCache.DefaultNetworkCredentials'. Nếu bạn đã đặt một cái gì đó trong CredentialCache và proxy của bạn yêu cầu thông tin đăng nhập như vậy, sau đó nó sẽ làm việc. Nếu không nó sẽ không giúp được gì. – cassandrad
đang Foole của làm việc một cách hoàn hảo đối với tôi, nhưng trong .NET 4.0, đừng quên kiểm tra xem Proxy là NULL, có nghĩa là không có proxy cấu hình (bên ngoài môi trường của công ty)
Vì vậy, đây là đoạn code mà giải quyết vấn đề của tôi với proxy công ty của chúng tôi
WebClient web = new WebClient();
if (web.Proxy != null)
web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") };
WebProxy myproxy = new WebProxy("127.0.0.1:8888", false);
NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials;
var document = getHtmlWeb.Load("URL", "GET", myproxy, cred);
Tốt hơn là viết giải thích về giải pháp của bạn chứ không chỉ viết mã. Bạn có thể chỉnh sửa trong một số văn bản có thể giúp người đọc? –
tôi sẽ sử dụng một ví dụ để thêm vào các câu trả lời ở trên.
Tôi chạy vào các vấn đề ủy quyền trong khi cố gắng cài đặt các gói qua Platform Installer Web
Điều đó nữa cũng sử dụng một tập tin cấu hình mà là WebPlatformInstaller.exe.config
Tôi đã cố gắng chỉnh sửa đề nghị trong this IIS forum đó là
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy enabled="True" useDefaultCredentials="True"/>
</system.net>
</configuration>
và
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://yourproxy.company.com:80"
usesystemdefault="True"
autoDetect="False" />
</defaultProxy>
</system.net>
</configuration>
Không có cách nào trong số này hoạt động.
gì làm việc cho tôi là này -
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" />
</defaultProxy>
</system.net>
Module cần thiết phải đăng ký với Web Platform Installer để sử dụng nó.
này một-liner làm việc cho tôi:
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
CredentialCache.DefaultNetWorkCredentials
là cài đặt proxy thiết lập trong Internet Explorer.
WebRequest.DefaultWebProxy.Credentials
được sử dụng cho tất cả kết nối internet trong ứng dụng.
- 1. Kết nối SOAP thông qua proxy bằng URLEndpoint
- 2. Kết nối HTTPS qua máy chủ proxy
- 3. C# TcpClient.Connect qua proxy
- 4. Kết nối Arduino với Internet qua proxy tường lửa
- 5. Cách kết nối với SQL Server qua máy chủ proxy
- 6. Cách kết nối máy chủ Ổ cắm qua proxy HTTP
- 7. Máy khách Amazon S3 kết nối thông qua proxy - putObject nhận NullPointerException
- 8. Kết nối với MySQL thông qua Cygwin
- 9. XMLDocument.Load (url) thông qua proxy
- 10. Sử dụng máy khách SignalR thông qua proxy web
- 11. Git thông qua xác thực proxy thông báo
- 12. AnkhSVN không thể kết nối Do Proxy
- 13. Kết nối với Sqlite trong android thông qua Servlet
- 14. Kho SVN Gương [Ghi thông qua proxy]
- 15. ngoại lệ Strange khi kết nối với một dịch vụ WCF thông qua một máy chủ proxy
- 16. Kết nối với cơ sở dữ liệu qua proxy một tập lệnh python
- 17. TortoiseSVN qua tập lệnh proxy
- 18. Kết nối với mongodb thông qua trình duyệt?
- 19. kết nối cá thể ec2 thông qua filezilla
- 20. Gửi thư qua proxy http
- 21. CONNECT yêu cầu proxy HTTP chuyển tiếp qua kết nối SSL?
- 22. C++ chuyển hướng kết nối gửi đi
- 23. Kết nối với tài khoản lưu trữ Azure qua máy chủ proxy
- 24. Thời gian kết nối Git cố gắng sao chép qua proxy
- 25. Chuyển hướng kết nối TCP MySQL tới proxy
- 26. nginx 1.2.0 - socket.io - HTTP/1.1 - Kết nối websocket proxy
- 27. Trình khách C++ kết nối với IBM MQ qua SSL
- 28. Sự khác nhau giữa kết nối và kết nối Proxy trong tiêu đề HTTP là gì?
- 29. Kết nối WiFi qua android
- 30. Cách nhận kết nối URL bằng proxy trong java?
trong ví dụ về lập trình, bạn không đặt cổng, TẠI SAO? – Skuta
@Skuta - Không có lý do cụ thể. Đó chỉ là một sự giám sát như trong ví dụ đó, tôi đang sử dụng hàm tạo để lấy URL (như một chuỗi) và một boolean để xác định xem các địa chỉ cục bộ có bị bỏ qua hay không. Nếu bạn cần một số cổng cụ thể, có thể tốt hơn khi sử dụng hàm tạo quá tải cho phép URL (dưới dạng chuỗi) và số cổng (dưới dạng Int32), sau đó đặt thuộc tính 'BypassProxyOnLocal' thành True (nếu cần) ngay lập tức sau đó. – CraigTP
@Skuta - Tôi đã chỉnh sửa bài đăng của mình để làm rõ điều này và để đảm bảo rằng các ví dụ lập trình và khai báo thực sự đang làm điều tương tự! – CraigTP