[C#] Gegevens ophalen achter digest auth beveiliging

Pagina: 1
Acties:
  • 316 views sinds 30-01-2008
  • Reageer

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 20-02 19:55
hoi,

voor een opdracht ben ik bezig om verschillende zoekresultaten van SE op te halen, waaronder die van Ilse. Die hebben hiervoor een bepaalde service draaien waar je tegenaan kunt kletsen, dat werkt allemaal perfect met PHP alleen nu wil ik het met een service geschreven in C# doen.
Het opvragen van informatie is niet het probleem, wel de digest authentication die Ilse gebruikt :( Voor zover ik weet en heb kunnen vinden is er geen standaard manier om dit te doen. Helaas gebruiken ze geen SOAP maar normale http requests.
Heeft iemand hier ervaring of een idee voor? Met PHP en CURL is het zo gepiept alleen, omdat ik nog meer SE's ga raadplegen en die niet allemaal zo snel reageren heb ik liever een andere oplossing (service/servlet) ipv de 30sec time outs van PHP ;)

Met PHP kun je het zo doen
PHP:
1
2
3
4
5
6
7
8
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xmlstud.ilse.nl:4754/do_query?search_for='.$_POST['queryString']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, '<user>:<code>');

$data = curl_exec($ch);
curl_close($ch);

Alleen heb je geen CURL in C#....

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Kijk eens naar de WebRequest class.

Vlug voorbeeldje:
C#:
1
2
3
4
5
6
7
8
WebRequest request = WebRequest.Create("http://xmlstud.ilse.nl:4754/.......");
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();

// gebruik de stream...

stream.Close();
response.Close();


edit:
Dan moet ik natuurlijk niet over het digest auth probleem heen lezen... 8)7
Hopelijk helpt Google op 'digest auth webrequest' je in de goede richting :)

Bekijk Authenticate BASIC or DIGEST Programatically eens :)

[ Voor 43% gewijzigd door Zr40 op 26-05-2006 23:13 ]


  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 20-02 19:55
mietsers! Ergens had ik het kunnen weten natuurlijk dat er een paar lui rondlopen die dat zaakje porten ;)

Is die CredentialCache een deel van de WebRequest of ??

ik gebruik Visual Web Devver EE en Studio EE dus ik weet niet of ik wel alle mogelijkheden heb die de Pro versies (of iig de expres+versies) hebben..

update:
Ik heb nu het volgende, alleen krijg ik nog een vage error
C#:
1
2
3
4
5
6
7
8
9
10
            Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
            Easy easy = new Easy();
            Easy.WriteFunction wf = new Easy.WriteFunction(OnWrite);
            easy.SetOpt(CURLoption.CURLOPT_URL, "http://xmlstud.ilse.nl:4754/do_query?search_for=");
            easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
            easy.SetOpt(CURLoption.CURLOPT_HTTPAUTH, 1);
            easy.SetOpt(CURLoption.CURLOPT_USERPWD, "<name>:<code>");
            easy.Perform();

            Curl.GlobalCleanup();


code:
1
Error   1   The CodeDom provider type "Microsoft.VisualC.CppCodeProvider, CppCodeProvider, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" could not be located.

Ook vreemd dat 'ie bij "CURLOPT_HTTPAUTH" niet iets als "CURLAUTH_DIGEST" pakt wat volgens de docs wel zou moeten :S...

[ Voor 70% gewijzigd door TheRebell op 27-05-2006 00:18 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Credential cache is geen onderdeel van WebRequest. Credentails zijn gewoon een onderdeel van het .net framework. WebRequest maakt hier gebruik van en zover ik weet heeft die ook gewoon ondersteuning voor digest authentication

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

Laat me raden, je zit ook op de TUe en volgt Information Retrieval? :P

Ik heb dit afgelopen week in elkaar gezet: (heb je een kant en klaar stukje code)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
        //Byte[] encodedBytes = System.Text.Encoding.UTF8.GetBytes(searchPhrase);
        //searchPhrase = System.Text.Encoding.UTF8.GetString(encodedBytes);

        string query = "http://xmlstud.ilse.nl:4754/do_query?search_for=" + searchPhrase;
        WebRequest request = HttpWebRequest.Create(query);
        //CredentialCache cc = new CredentialCache();
        request.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
        WebResponse response = request.GetResponse();
        StreamReader r = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

        /* Je XML documentje parsen */
 
        r.Close();

Succes ermee!

[ Voor 6% gewijzigd door Rodyman op 28-05-2006 17:02 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je maakt een CredentialCache aan maar doet er vervolgens niks mee? Regel 6 kun je volgens mij gewoon weglaten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

haha inderdaad ;) goed gezien..

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Daarnaast, wat is de bedoeling van de eerste twee regels? Eerst encode je de searchPhrase als UTF8, waarna je hem weer decoded. Dit resulteert in exact dezelfde string als waarmee je begon ;)

  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

Ook weer waar :) Dit stukje is wat gecopy paste van wat voorbeelden op internet, vandaar dat er nog wat overbodige dingen in zaten.
Pagina: 1