WebRequest连接到Wikipedia API

这可能是一个非常简单的问题,但我似乎无法格式化web webrequest /响应以从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(); } 

您可能希望首先尝试GET请求,因为它更简单一些(您只需要POST以进行维基百科登录)。 例如,尝试模拟此请求:

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

这是代码:

 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(); } } 

编辑:他在POST请求中遇到的另一个问题是, The exception is : The remote server returned an error: (417) Expectation failed. 它可以通过设置来解决:

 System.Net.ServicePointManager.Expect100Continue = false; 

(这来自: HTTP POST返回错误:417“期望失败。” )

我目前正处于实现C#MediaWiki API的最后阶段,该API允许轻松编写大多数MediaWiki查看和编辑操作的脚本。

主要的API在这里: http : //o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs这里是一个使用API​​的例子:

 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; 

您似乎在HTTP POST上推送输入数据,但似乎您应该使用HTTP GET。

来自MediaWiki API文档:

API通过查询字符串中的参数获取其输入。 每个模块(以及每个action = query子模块)都有自己的一组参数,这些参数列在文档和action = help中,可以通过action = paraminfo检索。 http://www.mediawiki.org/wiki/API:Data_formats