[C#] volledige request van webrequest uitlezen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 25-09 09:02

Hmail

Doet ook maar wat.

Topicstarter
Ik hoop dat iemand hier me kan helpen, ik probeer een NZB bestand te posten naar SABnzbd, dat op cherrypy draait. Ik krijg daar een aantal foutmeldingen uit, en ik wil weten wat er mis gaat in mijn request. Van hun forum heb ik een voorbeeld request gezien, en ik wil mijn data daarmee vergelijken. Een voorbeeld, zoals het eruit zou moeten zien: http://sabnzbd.org/switch/example1.txt

Ik heb echter geen idee hoe ik zo'n request uitlees in C#. Met google kom ik niet verder, is er iemand hier die me kan helpen? Mijn code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.Method = "POST";
string boundary = "------" + DateTime.Now.Ticks.ToString("x");
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
StringBuilder sb = new StringBuilder();
sb.Append("---");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"nzbfile\"; filename=\"" + filename + "\";");
sb.Append("\r\n");
sb.Append("Content-Type: text/plain");
sb.Append("\r\n");
sb.Append("\r\n");
byte[] postHeaderBytes = Encoding.ASCII.GetBytes(sb.ToString());
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
webrequest.ContentLength = length;
Stream requestStream = webrequest.GetRequestStream();
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
            
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
int bytesread = 0;
while ((bytesread = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesread);
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
WebResponse responce = webrequest.GetResponse();
Stream s = responce.GetResponseStream();
StreamReader sr = new StreamReader(s);
MessageBox.Show(sr.ReadToEnd());

Alvast bedankt!

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Aangezien je het bestand hebt, waarom move je het bestand niet gewoon naar een dir die sabnzbd vanzelf inleest, en daaruit de nzb op eet? B)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 25-09 09:02

Hmail

Doet ook maar wat.

Topicstarter
Het script staat op een andere computer, op dit moment nog in het netwerk, maar ik ben het script aan het schrijven omdat de server ergens anders komt te staan. :)

[ Voor 3% gewijzigd door Hmail op 28-12-2008 12:25 ]

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

http://msdn.microsoft.com...system.net.webclient.aspx

Hiermee kan je heel gemakkelijk files uploaden (blijkbaar, heb het ook maar gevonden met google).

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 25-09 09:02

Hmail

Doet ook maar wat.

Topicstarter
Dat weet ik :) Maar dat is mijn vraag niet, ik wil weten hoe ik het request uitlees, het uploaden gaat me prima af.
edit:
Ik lees nu de buffers uit (postheaderBytes, buffer en boundaryBytes) en schrijf het naar het bestand, maar ik mag toch aannemen dat het request groter is dan wat er in die bytes staat? Ik mis eigenlijk dit in die bytes:
C#:
1
2
3
webrequest.Method = "POST";
string boundary = "------" + DateTime.Now.Ticks.ToString("x");
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;

[ Voor 63% gewijzigd door Hmail op 28-12-2008 12:53 ]

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
Dat zit in de headers van je webrequest niet in je content. ContentLength is dan ook de lengte van je rauwe data.

Je content begint bij "<?xml version="1.0" encoding="iso-8859-1" ?>" en dat is wat je wilt wegschrijven naar file ofzow. Die dingen die erboven staan zitten als het goed is niet in je content maar wordt door de webrequest in zijn header informatie opgenomen.

Daarnaast wil je van de webrequest de Content-Type, Content-Length, Content-Disposition en de Content-Type wegschrijven.

Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 25-09 09:02

Hmail

Doet ook maar wat.

Topicstarter
Oke, is er een mogelijkheid om die headers plain text te krijgen? Die nzb moet inderdaad in de content komen, maar de headers zijn vrij belangrijk dat die goed staan.

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 10-09 20:32
volgens mij zijn de dingen die ik in mijn vorige post genoemd heb properties op de webrequest en anders heb je de headers collectie. Daar kun je ze dan gewoon direct uithalen als een string. Bijvoorbeeld. Webrequest.headers["Content-Type"].

Maar zoek anders de classe HTTPWebrequest eens op in msdn. Daar staat is princiepe alles in wat je wilt weten voor dit probleem.

Acties:
  • 0 Henk 'm!

  • Hmail
  • Registratie: April 2003
  • Laatst online: 25-09 09:02

Hmail

Doet ook maar wat.

Topicstarter
Heb ik gedaan, ik heb vanaf gisteravond niet anders gedaan :P Maar een oplossing zoals ik hem verwacht zit er niet tussen, helaas. Misschien moet ik m'n verwachtingen bijstellen :P

Ik heb nu een oplossing, hoewel een stuk ingewikkelder, ik monitor het aan de kant van de server, welke requests hij binnenkrijgt met tcpdump. Die lees ik weer uit in Wireshark, en ik heb nu *net* m'n eerste, volledige request zoals ik hem wilde hebben. *O*
Mocht iemand nog een oplossing weten om zoiets eruit te krijgen, heel graag:
code:
1
2
3
4
5
6
7
8
9
10
POST /sabnzbd/api?mode=addfile&name=file.nzb HTTP/1.1
Content-Type: multipart/form-data; boundary=------8cb370d96a49da4
Host: tiffany:7777
Content-Length: 7078
Expect: 100-continue
Connection: Keep-Alive

---------8cb370d96a49da4
Content-Disposition: form-data; name="name"; filename="file.nzb"
Content-Type: text/plain

It might sound as if I have no clue what I'm doing, but I actually have a vague idea.

Pagina: 1