2013-01-10 36 views
12

Tôi dường như không thể truy cập trang web bằng Powershell. Tôi tiếp tục nhận được yêu cầu xác thực "(407) Proxy". Tôi đã thử nhiều thứ. Tôi không biết proxy là gì hoặc loại xác thực nào mà nó yêu cầu. Điều duy nhất tôi có quyền truy cập là trong IE nó sử dụng một kịch bản để cấu hình. Tôi đã thử sử dụng một số IP từ đó, nhưng không có may mắn. Bất kỳ ý tưởng?Truy cập web bằng Powershell và Proxy

Dưới đây là một ví dụ về những gì tôi đã cố gắng:

$wc = New-Object System.Net.WebClient 
$wc.Headers.Add("User-Agent","Mozilla/4.0+")   
$wc.Proxy = [System.Net.WebRequest]::DefaultWebProxy 
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials 
$wc.DownloadString("http://stackoverflow.com") 
+1

bất kỳ giải pháp cuối cùng nào có mẫu mã nguồn đầy đủ? – Kiquenet

+1

Tôi cũng đã thử mã trên và một số biến thể, luôn nhận được lỗi 407. – Bratch

Trả lời

0

Nếu bạn biết kịch bản - chỉ cần tải nó, cởi mở với Notepad và tìm IP và cổng của máy chủ proxy của bạn. Đối với xác thực - hầu hết các thông tin đăng nhập cửa sổ của bạn có thể được sử dụng, vì vậy trong lý thuyết bạn sẽ có thể giữ nó trống, trừ khi có điều gì đó đáng ngờ trong kịch bản.

0

thử thêm thông tin bộ nhớ cache ....

$domain = 'ChDom' 
$Client = new-object System.Net.WebClient 
$cc = New-object System.Net.CredentialCache 
$urlObj = New-object System.Uri($url) 

#these variables must be plaintext strings 
$creds = New-object System.Net.NetworkCredential($Username,$Password) 

#your auth might be different than mine 
$cc.add($urlobj,"NTLM",$creds) 
$client.Credentials = $cc 
$Client.Downloadfile($url, C:\Temp\TestPage.html) 
41

Tôi đã có một vấn đề tương tự và giải quyết nó chỉ với hai dòng PowerShell:

$browser = New-Object System.Net.WebClient 
$browser.Proxy.Credentials =[System.Net.CredentialCache]::DefaultNetworkCredentials 

Hope this helps.

+0

Giúp tôi. +1 – ulidtko

+0

Đã làm việc- cảm ơn! –

+0

Không hoạt động với tôi trong PowerShell 2. Vẫn nhận được "(407) Yêu cầu xác thực proxy". Win7, IE11. – Bratch

1

Nếu bạn sử dụng những điều sau đây bạn sẽ nhận được một dấu nhắc để nhập thông tin của bạn:

$client.Credentials = Get-Credential 
+1

Điều này làm việc cho tôi khi tất cả các phương pháp khác để cài đặt Leiningen ('lein self-install') không thành công. Tôi chỉ chỉnh sửa thay đổi này thành 'lein.bat'. –

3

Nếu proxy câu trả lời "407", "xác thực proxy đòi hỏi", sau đó yêu cầu xác nhận:

$Username="Hugo" 
$Password="abcdefgh" 
$WebProxy = New-Object System.Net.WebProxy("http://webproxy:8080",$true) 
$url="http://aaa.bbb.ccc.ddd/rss.xml" 

$WebClient = New-Object net.webclient 

$WebClient.Proxy=$webproxy 
$WebClient.proxy.Credentials = New-Object System.Net.NetworkCredential($Username, $Password) 
$path="C:\Users\hugo\xml\test.xml" 
$WebClient.DownloadFile($url, $path) 

Content bây giờ nằm ​​trong "test.xml"

3

tôi chưa thấy ai làm điều gì đó như thế này nhưng có một cách để làm điều này như là một "khung cảnh toàn cầu" trong Powershell của bạn kịch bản (Tôi nhớ làm điều này trong C# trước khi xây dựng dev địa phương).

[System.Net.WebRequest]::DefaultWebProxy = [System.Net.WebRequest]::GetSystemWebProxy() 
[System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials 

Bằng cách này, nếu bạn không muốn cập nhật tất cả các WebClients của bạn với chi tiết proxy, bạn có thể ghi đè toàn bộ cài đặt toàn cầu (phải được thực hiện mỗi khi bạn chạy tập lệnh). Nhưng điều này giả định rằng người dùng Windows đã đăng nhập hiện tại là hợp lệ cho máy chủ proxy do hệ thống xác định.

LƯU Ý: Tôi cho rằng điều này chỉ hữu ích như một cách nhanh chóng và dơ bẩn để có được tập lệnh PS hoạt động không được nhận biết trước đó (như Cake build).

Các vấn đề liên quan