c# - 连接到维基百科 API 的 WebRequest

标签 c# mediawiki webrequest wikipedia wikipedia-api

这可能是一个可悲的简单问题,但我似乎无法格式化帖子 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();
    }

最佳答案

您可能想先尝试 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 请求中遇到的另一个问题是,异常是:远程服务器返回错误:(417) Expectation failed。它可以通过设置解决:

System.Net.ServicePointManager.Expect100Continue = false;

(来自:HTTP POST Returns Error: 417 "Expectation Failed.")

关于c# - 连接到维基百科 API 的 WebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773029/

相关文章:

c# - Windows-7 64 位中的 Oracle 错误

powershell - 如何使用Invoke-WebRequest查看发送的 header ?

c# - 使用 MonoTouch 的异步请求

c# - “Code First From Database”模板未显示在 Visual Studio 实体数据模型向导中

c# - 如何根据鼠标位置从文本框中获取特定文本值

c# - 在 HttpClient 中覆盖主机

wiki - MediaWiki大量用户删除/合并/阻止

html - 如何确保可折叠表格后面的文本显示在其下方,而不是右侧?

php - 如何为 MediaWiki 设置外部单点登录?

c# - 通过数据流在C#中接收数据并通过boost :asio http server example读取数据