WebRequest pour se connecter à l'API Wikipedia
-
12-09-2019 - |
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();
}
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