10

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

3 回答 3

7

您可能想先尝试 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 Returns Error: 417 "Expectation Failed."

于 2009-04-21T15:11:07.397 回答
1

我目前正处于实现 C# MediaWiki 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;
于 2010-04-22T14:20:19.140 回答
0

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

来自 MediaWiki API 文档:

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

于 2009-04-21T15:10:20.833 回答