2009-04-21 40 views
10

Đây có thể là sự cố đơn giản về mặt đường dẫn, nhưng tôi dường như không thể định dạng yêu cầu/phản hồi web bài đăng để nhận dữ liệu từ Wikipedia API. Tôi đã đăng mã của mình dưới đây nếu có ai đó có thể giúp tôi xem vấn đề của mình.WebYêu cầu kết nối với Wikipedia API

string pgTitle = txtPageTitle.Text; 

    Uri address = new Uri("http://en.wikipedia.org/w/api.php"); 

    HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 

    request.Method = "POST"; 
    request.ContentType = "application/x-www-form-urlencoded"; 

    string action = "query"; 
    string query = pgTitle; 

    StringBuilder data = new StringBuilder(); 
    data.Append("action=" + HttpUtility.UrlEncode(action)); 
    data.Append("&query=" + HttpUtility.UrlEncode(query)); 

    byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString()); 

    request.ContentLength = byteData.Length; 

    using (Stream postStream = request.GetRequestStream()) 
    { 
     postStream.Write(byteData, 0, byteData.Length); 
    } 

    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
    { 
     // Get the response stream. 
     StreamReader reader = new StreamReader(response.GetResponseStream()); 

     divWikiData.InnerText = reader.ReadToEnd(); 
    } 
+1

Thoạt nhìn bạn đang mã có vẻ tốt. Vấn đề cụ thể hiện diện như thế nào? Ngoại lệ là gì? –

+0

Trường hợp ngoại lệ là: Máy chủ từ xa trả về lỗi: (417) Yêu cầu không thành công. – NickJ

+0

@NickJ: Thử mã của tôi bên dưới. Nó đã làm việc. – Keltex

Trả lời

6

Bạn có thể muốn thử một yêu cầu GET đầu tiên bởi vì nó đơn giản hơn một chút (bạn sẽ chỉ cần phải POST cho wikipedia đăng nhập). Ví dụ, hãy cố gắng mô phỏng yêu cầu này:

http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page

Dưới đây là các mã:

HttpWebRequest myRequest = 
    (HttpWebRequest)WebRequest.Create("http://en.wikipedia.org/w/api.php?action=query&prop=images&titles=Main%20Page"); 
using (HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse()) 
{ 
    string ResponseText; 
    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
    { 
     ResponseText = reader.ReadToEnd(); 
    } 
} 

Edit: Vấn đề khác mà ông đã trải qua trên yêu cầu POST được, The exception is : The remote server returned an error: (417) Expectation failed. Nó có thể được giải quyết bằng cách thiết lập :

(Đây là từ: HTTP POST Returns Error: 417 "Expectation Failed.")

+0

Cảm ơn Keltex, Tôi có thể làm cho tính năng Làm việc dễ dàng đủ. sử dụng: WebRequest req = WebRequest.Tạo (địa chỉ + "?" + Dữ liệu) thành WebRequest; sử dụng (WebResponse resp = req.GetResponse() làm WebResponse) { StreamReader readme = new StreamReader (resp.GetResponseStream()); divWikiData.InnerText = readme.ReadToEnd(); } Yêu cầu đăng bài này vẫn đang phỉ báng tôi - và tôi cần Đăng cho một số hành động mà api cho phép .. – NickJ

+0

Nick, bạn có thể vui lòng cho chúng tôi biết loại sự cố mà yêu cầu POST của bạn đang hiển thị hay không. Ngoại lệ bạn nhận được là gì? Nó hoạt động như thế nào? –

+0

Ngoại lệ là: Ngoại lệ là: Máy chủ từ xa trả về lỗi: (417) Không thành công. – NickJ

0

Bạn dường như đang đẩy dữ liệu đầu vào trên HTTP POST, nhưng có vẻ như bạn nên sử dụng HTTP GET.

Từ các tài liệu MediaWiki API:

The API takes its input through parameters in the query string. Every module (and every action=query submodule) has its own set of parameters, which is listed in the documentation and in action=help, and can be retrieved through action=paraminfo. http://www.mediawiki.org/wiki/API:Data_formats

1

Tôi hiện đang ở giai đoạn cuối cùng của việc triển khai API C# MediaWiki, cho phép dễ dàng tạo kịch bản cho hầu hết các hành động chỉnh sửa và xem trên MediaWiki.

API chính là ở đây: http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs và đây là một ví dụ về các API được sử dụng:

var wiki = new O2MediaWikiAPI("http://www.o2platform.com/api.php"); 

wiki.login(userName, password); 

var page = "Test"; // "Main_Page"; 

wiki.editPage(page,"Test content2"); 

var rawWikiText = wiki.raw(page); 
var htmlText = wiki.html(page); 

return rawWikiText.line().line() + htmlText; 
+0

Liên kết bị hỏng. Bạn có liên kết được cập nhật không? – Gabe

+1

Xin lỗi về điều đó, gần đây tôi đã chuyển API đó đến vị trí trung tâm hơn. Bạn có thể thấy rằng tập tin ở đây: http://o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/OwaspWikiAPI.cs đây là API chính được sử dụng trong hồ sơ rằng http://o2platform.googlecode.com/svn/trunk/O2_Scripts/APIs/MediaWiki/O2MediaWikiAPI.cs và đây là công cụ GUI được xây dựng trên những APIS http://o2platform.googlecode.com/svn/trunk/ này O2_Scripts/Tools/MediaWikiEditor.cs.o2 Nếu bạn muốn thử các kịch bản đó, chúng là một phần của Nền tảng O2 mà bạn có thể lấy từ http://o2platform.com/ –

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