2011-11-22 55 views
26

Có thể gửi HTTP POST với một số dữ liệu biểu mẫu với System.Net.WebClient không?Gửi HTTP POST với System.Net.WebClient

Nếu không, có thư viện nào khác như WebClient có thể thực hiện HTTP POST không? Tôi biết tôi có thể sử dụng System.Net.HttpWebRequest, nhưng tôi đang tìm cái gì đó không phải là tiết.

Hy vọng rằng nó sẽ giống như thế này:

Using client As New TheHTTPLib 
    client.FormData("parm1") = "somevalue" 
    result = client.DownloadString(someurl, Method.POST) 
End Using 

Trả lời

54

Dựa trên câu trả lời của @carlosfigueira, tôi đã xem xét kỹ hơn các phương pháp của WebClient và tìm thấy UploadValues, chính xác là những gì tôi muốn:

Using client As New Net.WebClient 
    Dim reqparm As New Specialized.NameValueCollection 
    reqparm.Add("param1", "somevalue") 
    reqparm.Add("param2", "othervalue") 
    Dim responsebytes = client.UploadValues(someurl, "POST", reqparm) 
    Dim responsebody = (New Text.UTF8Encoding).GetString(responsebytes) 
End Using 

Các phần quan trọng là thế này:

client.UploadValues(someurl, "POST", reqparm) 

Nó sẽ gửi bất cứ động từ tôi gõ vào, và nó cũng giúp tôi tạo ra một dữ liệu mẫu đúng URL mã hóa, tôi chỉ phải cung cấp các thông số như một NameValueCollection.

+0

'someUrl' là gì? Tôi đang cố đăng nhập vào một trang web có biểu mẫu đăng nhập HTML, nó không đăng nhập. Dữ liệu kết quả giống như tôi đang ẩn danh. – Shimmy

+0

@Shimmy Tôi chưa thử sử dụng webclient trên một trang web yêu cầu đăng nhập. 'someUrl' là chuỗi URL, ví dụ:' client.UploadValues ​​("http: // localhost", "POST", reqparm) '. –

+0

chúng tôi có thể sử dụng yêu cầu POST này (bao gồm cả các tham số gọi) với cuộc gọi không đồng bộ không? – gumuruh

13

WebClient không có một sự hỗ trợ trực tiếp cho các dữ liệu hình thức, nhưng bạn có thể gửi bài HTTP bằng cách sử dụng phương pháp UploadString:

Using client as new WebClient 
    result = client.UploadString(someurl, "param1=somevalue&param2=othervalue") 
End Using 
+0

Nhưng máy chủ có đọc yêu cầu là 'GET' hoặc 'POST' không? –

+1

POST - đó là mặc định cho 'UploadString'. Bạn cũng có thể chuyển động từ HTTP dưới dạng tham số thứ ba tùy chọn – carlosfigueira

+2

Tôi đoán dữ liệu biểu mẫu cần phải được thoát: '" param1 = "& HttpUtility.UrlEncode (" somevalue ")' –

2

Theo như động từ http có liên quan, WebRequest có thể dễ dàng hơn. Bạn có thể đi cho một cái gì đó như:

WebRequest r = WebRequest.Create("http://some.url"); 
    r.Method = "POST"; 
    using (var s = r.GetResponse().GetResponseStream()) 
    { 
     using (var reader = new StreamReader(r, FileMode.Open)) 
     { 
      var content = reader.ReadToEnd(); 
     } 
    } 

Rõ ràng đây thiếu xử lý ngoại lệ và văn bản cho cơ yêu cầu (mà bạn có thể sử dụng r.GetRequestStream() và viết nó như một dòng suối thường xuyên, nhưng tôi hy vọng nó có thể giúp đỡ một số

.