Dim request As WebRequest = WebRequest.Create(".../api.php?action=login")
request.Method = "POST"
Dim postData As String = "lgname=X&lgpassword=Y"
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim objXML As New System.Xml.XmlDocument
objXML.Load("http://fi.wikipedia.org/w/api.php?action=query&...")
Application.DoEvents()Tämä koodi ei toimi! Tiedän kyllä miksi, mutten tiedä miten korjata toimivaksi.
Miten saisin loggaamaan MediaWikiin ilman virheitä (esim. HTTP 417, 403 jne.)?
Käytin apunani em. koodin kirjoittamisessa tätä artikkelia.
TIEDÄN OLEVANI HUONO OHJELMOINNISSA. SIITÄ HUOLIMATTA TOIVON YSTÄVÄLLISIÄ KOMMENTTEJA.
Eihän tuossa ole mitään logiikkaa. Kirjaudut yhdellä pyynnöllä, ja sitten teet täysin riippumattoman toisen pyynnön. Mistä ajattelit palvelimen saavan selville, että kyseessä on sama ohjelma, joka juuri kirjautui?
Suosittelen WebClientin käyttöä. Tavallinen WebClient ei muista keksejä, mutta tämä muistaa (C#:lla, käännä itse VB.NETiksi):
public class CookieAwareWebClient: WebClient {
private CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address) {
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest) {
(request as HttpWebRequest).CookieContainer = m_container;
}
return request;
}
}Sitten voit käyttää luokkaa tähän tapaan:
WebClient wc = new CookieAwareWebClient();
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.UploadString(".../api.php?action=login", "POST", "lgname=X&lgpassword=Y");
string sivu = wc.DownloadString(".../api.php?action=query&...");Public Class CookieAwareWebClient Inherits WebClient Private m_container As New CookieContainer() Protected Overrides Function GetWebRequest(address As Uri) As WebRequest Dim request As WebRequest = MyBase.GetWebRequest(address) If request Is HttpWebRequest Then CType(request, HttpWebRequest).CookieContainer = m_container End If Return request End Function End Class
Aihe on jo aika vanha, joten et voi enää vastata siihen.