2011-10-10 45 views
14

Tôi đang tìm kiếm để thực hiện các yêu cầu http cho các trang web với powershell, điều này có thể và nếu có, làm thế nào tôi có thể đạt được điều này?yêu cầu http với powershell

Tôi có thể gửi yêu cầu tới trang https không? Tôi có thể thực hiện yêu cầu http với một tập tin dơi nhưng không https, đã hy vọng tôi có thể https yêu cầu trang với PowerShell.

+0

Bạn đang yêu cầu nội dung từ các trang web với giấy chứng nhận có chữ ký của Certificate Authorities nổi tiếng? Trình duyệt và hầu hết các ngăn xếp HTTP đều có thể truy xuất nội dung từ các trang web HTTPS có chứng chỉ không đúng, đã hết hạn hoặc tự ký (kiểm tra). Tuy nhiên, bạn thường có thể đặt chính sách để bỏ qua vấn đề chứng chỉ hoặc nhập chứng chỉ được đề cập. – NerdDad

Trả lời

12

Bạn có thể sử dụng các lớp WebRequestHttpWebRequest thông thường do khung .NET cung cấp.

$request = [System.Net.WebRequest]::Create('http://example.com') 
# do something with $request 

Không khác gì khi sử dụng cùng một lớp và API từ C#, ngoại trừ các khác biệt cú pháp cho PowerShell.

PowerShell v3 cũng mang lại Invoke-WebRequest và một vài loại khác.

+0

Và bạn có thể yêu cầu trang https bằng các trang ở trên không? – amateur

+1

có, hãy xem http://stackoverflow.com/questions/560804/how-do-i-use-webrequest-to-access-an-ssl-encrypted-site-using-https –

+0

Chỉ trong trường hợp ai đó cần gửi Yêu cầu POST, vì đó là điều tiếp theo tôi cần: $ request = [System.Net.WebRequest] :: Tạo ('mypageurl'); $ request.Method = "POST"; $ yêu cầu.ContentType = "ứng dụng/x-www-form-urlencoded"; $ bytes = [System.Text.Encoding] :: ASCII.GetBytes ("name = john & number = 5"); $ request.ContentLength = $ bytes.Length; $ requestStream = $ request.GetRequestStream(); $ requestStream.Write ($ byte, 0, $ bytes.Length); $ requestStream.Close(); $ request.GetResponse(); –

8

Tùy thuộc vào những gì bạn đang làm, bạn cũng có thể sử dụng System.Net.WebClient, mà là một sự trừu tượng đơn giản của HttpWebRequest

$client = new-object system.net.webclient 

Nhìn vào đây để khác biệt: What difference is there between WebClient and HTTPWebRequest classes in .NET?

PS: Với Powershell v3.0, bạn có Invoke-WebRequestInvoke-RestMethod lệnh ghép ngắn có thể được sử dụng cho các mục đích tương tự

12

Hãy thử điều này:

(New-Object System.Net.WebClient).DownloadString("http://stackoverflow.com") 

WebClient.DownloadString Method (String)

hoặc trong PowerShell 3.0,

(Invoke-WebRequest http://stackoverflow.com).content 

Invoke-WebRequest

+0

Ngắn và ngọt và hoạt động với chuỗi truy vấn được thêm vào địa chỉ. –

2

Nếu vẫn thất bại, sử dụng Curl từ http://curl.haxx.se. Bạn có thể thiết lập mọi thứ, bao gồm xử lý chứng chỉ, POST, v.v. Không tinh tế, nhưng nó hoạt động và xử lý tất cả các trường hợp odder; ví dụ. bạn có thể đặt cờ --insecure để bỏ qua các vấn đề về tên chứng chỉ, hết hạn hoặc trạng thái kiểm tra.

1

Bạn có thể tạo yêu cầu HTTP, HTTPS, FTP và FILE bằng lệnh ghép ngắn Invoke-WebRequest. Điều này là khá dễ dàng và cung cấp cho nhiều tùy chọn để chơi xung quanh. Ví dụ: Để thực hiện yêu cầu đơn giản http/https để google.com

Invoke-WebRequest -Uri "http://google.com" 

Nhiều tài liệu tham khảo có thể được tìm thấy MSDN

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