Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

WP7 Webclient

Pagina: 1
Acties:

  • evolution536
  • Registratie: maart 2009
  • Laatst online: 04-01 18:14
Ik ben begonnen met een app voor Windows Phone 7 om het rooster van mijn schoolsite op te halen en te fetchen. Ik kom er echter niet achter waarom de volgende code niet werkt.
C#:
1
2
3
4
5
WebClient _client = new WebClient();
_client.Headers["Content-type"] = "application/x-www-form-urlencoded";
_client.UploadStringCompleted += (s, ev) => { System.Windows.MessageBox.Show(ev.Result); };
_client.UploadStringAsync(new Uri("https://student.roceindhoven.nl/index.php")
     , "GET", "REQ_PAGE=Rooster&OP=Klas&School=00020&Klas=" + klas);

Ik krijg bij zowel UploadStringAsync, DownloadStringAsync, als een WebRequest klasse een van de volgende foutmeldingen:
C#:
1
2
System.Net.ProtocolViolationException, zonder enige foutmelding in de InnerException, erg onduidelijk dus. Ik weet dat dit te maken heeft met dat ik een GET operatie wil uitvoeren en dat dit waarschijnlijk dus met die functie niet gaat.
System.Net.WebException: Webrequest returned the following error: NotFound. Een beetje vreemd, als je deze vergelijkt met de andere foutmelding. Komt erop neer dat ik met die foutmelding weinig wijzer geworden ben.

Heeft iemand al meer ervaring met WP7? Ik kom er niet uit hoe ik de output HTML kan ophalen die je zou krijgen als je deze URL gewoon in de browser intikt. Kan het komen doordat een session variabele voor de site nodig is, en hoe kun je middels deze functies de site met session variabele openen? Google is deze keer gewoon even niet mijn vriend :+

evolution536 wijzigde deze reactie 17-01-2012 13:43 (4%)


  • boe2
  • Registratie: november 2002
  • Niet online

boe2

'-')/

Persoonlijk zou ik met een HttpWebRequest werken. Deze heeft als voordeel dat je ook met sessies kan werken :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


  • Deathraven
  • Registratie: november 2001
  • Laatst online: 15-07 15:53
Wat ben je eigenlijk aan het doen? Weet je uberhaupt wat uploadstring doet?
Want je probeert nu om naar die php pagina de string
C#:
1
"REQ_PAGE=Rooster&OP=Klas&School=00020&Klas="

te uploaden (plus de variabele) over het GET protocol. Waarvoor het GET protocol dus niet bedoeld is.
Terwijl je volgens mij juist iets wilt downloaden...

TIP: Bouw die testapp in asp.net, pak Fiddler erbij, en je komt er heel snel achter waarom je die ProtocolViolationException krijgt.

WebClient en HttpWebRequest zijn standaard onderdeel van het .Net framework dus dit hoef je niet per see binnen een WP7 emulator te testen oid.

  • Caelorum
  • Registratie: april 2005
  • Laatst online: 09-07 20:54
Fiddler werkt ook met de emulator hoor :)

  • evolution536
  • Registratie: maart 2009
  • Laatst online: 04-01 18:14
dus:

HttpWebRequest i.p.v. WebClient;
DownloadStringAsync i.p.v. UploadStringAsync? (ik heb download ook geprobeerd op 2 manieren maar dit lukte niet.)

Ik kan het ook wel testen buiten WP7, maar WP7 werkt met het compact framework. Als het zo makkelijk zou zijn zou ik de makkelijke methods van .NET desktop wel gebruiken.

  • alwinuzz
  • Registratie: april 2008
  • Laatst online: 22:53
Als je je rooster wilt downloaden zou ik een method zoeken die iets download (en dus niet upload :P).
Welke 2 manieren had je al geprobeerd?
Wat ben je met die content type header van plan?

WP7 werkt niet meer met CF maar met een telefoonversie van Silverlight.
Googelen op "silverlight download web page" of zo iets (evt. WP7 erbij zetten) zou moeten vinden wat je zoekt.

  • boe2
  • Registratie: november 2002
  • Niet online

boe2

'-')/

quote:
evolution536 schreef op dinsdag 17 januari 2012 @ 20:28:
dus:

HttpWebRequest i.p.v. WebClient;
DownloadStringAsync i.p.v. UploadStringAsync? (ik heb download ook geprobeerd op 2 manieren maar dit lukte niet.)
Je zoekt het verkeerd.
Probeer eens HttpWebRequest.GetResponse (of de BeginGetResponse variant als je asyncroon wil werken), die is exact gemaakt voor wat je wil doen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


  • Ethernal Five
  • Registratie: december 2009
  • Niet online
Het is een GET request, dus kun je gewoon een webclient gebruiken.
Voorbeeldje:
C#:
1
string response = new Webclient().Downloadstring("https://student.roceindhoven.nl/index.php?REQ_PAGE=Rooster&OP=Klas&School=00020&Klas=" + klas);

Het is inderdaad makkelijker als je een POST hebt om httpwebrequests te gebruiken, maar voor GET's is dit gewoon makkelijker ;)

Ethernal Five wijzigde deze reactie 18-01-2012 11:11 (20%)


  • Kajel
  • Registratie: oktober 2004
  • Laatst online: 13-07 00:37

Kajel

Development in Style

Je kunt voor dit doeleinde prima WebClient gebruiken. Dat is gewoon een wrapper om HttpWebRequest heen die het een en ander wat makkelijker maakt. Zie ook het volgende artikel: http://www.codeproject.co...bClient-vs-HttpWebRequest
De in dat artikel gemaakt opmerkingen over het "blocken" van je UI, kunnen goed voorkomen worden door sensible gebruik te maken van databinding. Als je de opgehaalde data in een ObservableCollection stopt, kun je het makkelijk aan UI elementen binden. Als je dan ook de Async versie van downloaden gebruikt in WebClient, dan wordt de UI op de achtergrond geupdate, zodra je ObservableCollection nieuwe data binnenkrijgt.

Je moet overigens idd DownloadXxxAsync gebruiken om data op te halen. UploadXxxAsync is voor het versturen van data, wat doorgaans via een POST request gebeurt.

Kajel wijzigde deze reactie 18-01-2012 17:19 (10%)


  • evolution536
  • Registratie: maart 2009
  • Laatst online: 04-01 18:14
Dankjewel voor de informatie, maar ik zie veel posts die betrekking hebben op het standaard .NET framework. In Windows Phone is bijvoorbeeld:
quote:
Ethernal Five schreef op woensdag 18 januari 2012 @ 11:10:
Het is een GET request, dus kun je gewoon een webclient gebruiken.
Voorbeeldje:
C#:
1
string response = new Webclient().Downloadstring("https://student.roceindhoven.nl/index.php?REQ_PAGE=Rooster&OP=Klas&School=00020&Klas=" + klas);

Het is inderdaad makkelijker als je een POST hebt om httpwebrequests te gebruiken, maar voor GET's is dit gewoon makkelijker ;)
Niet beschikbaar. Dit is een desktop .NET method. Ook zijn HttpWebRequest.GetResponse en BeginGetResponse niet beschikbaar in Windows Phone 7 .NET.

Ik heb het met DownloadStringASync ook geprobeerd, maar dit werkt ook niet goed. Ik weet ook dat ik een session mee moet geven, en zag dat dit met HttpWebRequest mogelijk was.

EDIT: Ik zie nu net dat BeginGetResponse wel in WP7 zit. :+

evolution536 wijzigde deze reactie 19-01-2012 11:09 (12%)


  • Phalcon
  • Registratie: augustus 2000
  • Laatst online: 22-03-2012
Hier een stukje voorbeeld code om een post te doen. Je kan nog problemen krijgen met SSL. Dan zal je nog iets moeten doen met ServerCertificateValidationCallback.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static string HttpPost(string url, string param)
        {
            var requestLogin = (HttpWebRequest)WebRequest.Create(url);
            requestLogin.KeepAlive = false;
            requestLogin.AllowAutoRedirect = false;
            requestLogin.ProtocolVersion = HttpVersion.Version10;
            requestLogin.Method = "POST";

            byte[] postData = Encoding.ASCII.GetBytes(param);
            requestLogin.ContentType = "application/x-www-form-urlencoded";
            requestLogin.ContentLength = postData.Length;

            Stream requestStream = requestLogin.GetRequestStream();

            // now send it
            requestStream.Write(postData, 0, postData.Length);
            requestStream.Close();

            //get the response
            var response = (HttpWebResponse)requestLogin.GetResponse();
            Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());

        }

Pagina: 1


Call of Duty: Black Ops 4 HTC U12+ dual sim LG W7 Google Pixel 3 XL OnePlus 6 Battlefield V Samsung Galaxy S9 Dual Sim Google Pixel 3

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank en Intermediair de Persgroep Online Services B.V. © 1998 - 2018 Hosting door True