Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

jaran17

Frischling

  • »jaran17« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bern

Beruf: Azubi

  • Private Nachricht senden

1

07.04.2011, 14:10

HttpWebRequest

Hallo Zusammen


Ich habe bereits wieder ein kleines Problem bei meinem Projekt :|

Und zwar greife ich mithilfe vonhttpwebrequest/response auf den Quelltext einer Website zu. Dies Funktioniert auch prächtig, aber leider nur beim authority Teil der URI, also "www.google.ch" oder "www.golem.de". Wenn nun aber noch ein Path oder Query drangehängt ist (http://www.golem.de/1104/82624.html, http://www.google.ch/imghp?hl=de&tab=wi) Funktioniert es nicht mehr und bricht ab.

Nun, ich benutze das httpwebrequest zum ersten mal und deshalb meine Frage, ist das wirklich so dass es ur mit dem authority Teil funktioniert? oder was müsste ich anders machen?

Hier noch ein Codeausschnitt:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
StringBuilder sb = new StringBuilder(); 
byte[] buf = new byte[8192]; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
try 
{ 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream resStream = response.GetResponseStream(); 
string tempString = null;int count = 0; 
do 
{ 
count = resStream.Read(buf, 0, buf.Length); 
if (count != 0) 
{ 
tempString = Encoding.ASCII.GetString(buf, 0, count); 
sb.Append(tempString); 
} 
} 
while (count > 0); 
Console.WriteLine(sb.ToString());




Danke schonmal im Voraus :)
OMGWTFBBQ!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

07.04.2011, 14:52

Du kannst Parameter direkt in den Request-Stream schreiben:

C-/C++-Quelltext

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
public IAsyncResult BeginRequest(string uri, List<Pair<string, string>> values) // oder params Pair<string, string>[] values.. wie du magst ;)
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

    ASCIIEncoding encoding = new ASCIIEncoding();
    using (MemoryStream buffer = new MemoryStream())
    {
        foreach (Pair<string, string> value in values)
        {
            string line = string.Format("&{0}={1}", value.Value1, value.Value2);
            byte[] tmp = encoding.GetBytes(line);
            buffer.Write(tmp, 0, tmp.Length);
        }

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = buffer.Length;

        Stream stream = request.GetRequestStream();
        byte[] data = buffer.ToArray();
        stream.Write(data, 0, data.Length);
    }

    return request.BeginGetResponse(null, request);
}


Das verwendest du dann folgendermaßen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
List<Pair<string, string>> params = new List<Pair<string, string>>();

params.Add(new Pair<string, string>("hl", "de"));
params.Add(new Pair<string, string>("tab", "wi"));

IAsyncResult result = BeginRequest("www.google.ch/imghp", params);

// TODO: mach was auch immer du willst mit dem result


Hinweis: Pair<T, T> ist einfach eine mini Klasse die zwei Werte hält, in etwa so (abgespeckt):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
public class Pair<T1, T2>
{
    public T1 Value1;
    public T2 Value2;
    public Pair(T1 value1, T2 value2)
    {
        Value1 = value1;
        Value2 = value2;
    }
}
@D13_Dreinig

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

07.04.2011, 17:16

Hmm seltsam. Also bei mir ging sowas hier eig wunderbar (Auszug aus einem meiner Projekte. Ich meinte mit einem DNS Namen ging es auch):

C-/C++-Quelltext

1
2
3
WebRequest req = WebRequest.Create("http://192.168.0.99/camera-cgi/com/ptz.cgi?move=left");
            req.Credentials = new NetworkCredential("admin", "1234");
            req.GetResponse();
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

jaran17

Frischling

  • »jaran17« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bern

Beruf: Azubi

  • Private Nachricht senden

4

28.04.2011, 11:21

@ David pb

das was du da geschrieben hast ist mir ein wenig zu kompliziert >.<
und das ist ja nicht c#.

@ Nox

egal was ich eingebe, also mit der ip oder dem Domain Name, es funktioniert nicht wenn noch Parameter angehängt sind.

Ich finde leider im internet keinerlei Informationen dazu :( könntest du vielleicht meinen Code bei dir mal ausprobieren?

Zudem habe ich noch ein weiteres Problem: es gibt webseiten, wo man direkt wenn man sie aufruft auf eine andere seite weitergeleitet wird. Ist es nun möglich die URL dieser seite abzufangen und dann diese für den Request zu benutzen?



bin im Moment gerade ein wenig überfordert.

Grüsse
OMGWTFBBQ!

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

28.04.2011, 11:26

und das ist ja nicht c#.


Ähm doch...

jaran17

Frischling

  • »jaran17« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bern

Beruf: Azubi

  • Private Nachricht senden

6

28.04.2011, 11:31

und das ist ja nicht c#.


Ähm doch...

ok, na dann ^^
kam mir nur komisch vor weil was anderes steht und ich noch nie die "< >" Klammern brauchte bei mir ;) und c/c++ kenne ich nicht
OMGWTFBBQ!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

28.04.2011, 11:41

Die Klammern kommen von generics. Solltest du dir bei Gelegenheit mal ansehen;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

28.04.2011, 21:32

Kann dein Code nicht testen, da ich keinen Zugang mehr zu der WLAN Kamera habe.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

jaran17

Frischling

  • »jaran17« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Bern

Beruf: Azubi

  • Private Nachricht senden

9

02.05.2011, 11:23

mhmm. das ist mir jetzt ein bisschen peinlich :whistling:

das eine Problem mit den URLs lag nicht am Httpwebrequest :/ das Problem war, das ich den Quelltext einer Seite als xml datei speichere, und der Datei als Namen die URL gebe. wenn es nun aber ein "/" in der URL hat geht das nicht, weil diese nicht in einem Dateinamen vorkommen dürfen ^^ naja, hätte von anfang an besser debuggen sollen dan hätt ich gemerkt wo er rausfliegt-.-



Ich danke aber allen die versucht haben mir bei meinem Problem zu helfen :)
OMGWTFBBQ!

Werbeanzeige