Question

Cela peut être un problème pathétiquement simple, mais je ne peux pas sembler formater le message WebRequest / réponse pour obtenir des données de la Wikipedia API . J'ai posté mon code ci-dessous si quelqu'un peut me aider à voir mon problème.

    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();
    }
Était-ce utile?

La solution

Vous pouvez essayer une requête GET d'abord parce qu'il est un peu plus simple (vous aurez seulement besoin de POST pour la connexion wikipedia). Par exemple, essayez de simuler cette demande:

  

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

Voici le code:

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

Modifier L'autre problème qu'il connaît à la demande POST a été, The exception is : The remote server returned an error: (417) Expectation failed. Il peut être résolu en réglant:

System.Net.ServicePointManager.Expect100Continue = false;

(Ceci est de: HTTP POST renvoie l'erreur : 417 "Expectation Failed" )

Autres conseils

Je suis actuellement en phase finale de la mise en œuvre d'une API C # MediaWiki qui permet au script de la plupart MediaWiki visualisation et actions d'édition.

L'API principale est ici: http://o2platform.googlecode.com/svn/trunk/O2%20-%20All%20Active%20Projects/O2_XRules_Database/_Rules/APIs/OwaspAPI.cs et voici un exemple de l'API utilisée:

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;

Vous semblez pousser les données d'entrée sur HTTP POST, mais il semble que vous devez utiliser HTTP GET.

A partir de l'API MediaWiki docs:

  

L'API prend son entrée par   paramètres dans la chaîne de requête. Chaque   module (et chaque action = requête   sous-module) a son propre ensemble de   paramètres, qui figure dans la   la documentation et dans l'action = aide, et   peut être récupéré par   Action = paraminfo.    http://www.mediawiki.org/wiki/API:Data_formats

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top