Wie HttpRequest verwenden?

tequila slammer

Erfahrenes Mitglied
Hallo Forum,

ich habe ein kleines Programm geschrieben, dass Daten o
Offline in eine Datenbank speichert. Sowie man auf "syncronisieren" klickt sollen diese Daten nun an ein php - Script via post übergeben werden.

Leider scheitere ich schon am Ansatz, da mir die Verwendung von System.Web.HttpRequest nicht ganz klar ist. Vielleicht hat eine von euch ein kleines Codesnipped für mich oder einen guten Link in dem es quasi für "Dumme" erklärt wird. :rolleyes:

Google habe ich schon mit msdn, httpRequest usw. gequält aber naja.
 
Hallo,

hier ist ein Bespiel über HttpWebRequest / HttpWebResponse.

Die Methode meldet sich auf http://www.tutorials.de mit Benutzername & Passwort an.
C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace kde.training.HttpWebRequest1
{
    class Programm
    {
        private static HttpWebRequest request;
        private static HttpWebResponse response;
        public static void Main()
        {

            string requestUrl = "http://www.tutorials.de/forum/login.php?do=login";
            //Diese Parameter werden per Post Methode übergeben
            string requestParameter = "vb_login_username=myUserName&vb_login_password=myPassword&do=login";

            request = (HttpWebRequest)WebRequest.Create(requestUrl);

            #region Schreib Werte in den RequestStream der an die URL geschickt wird
            byte[] parameter = Encoding.UTF8.GetBytes(requestParameter);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = parameter.Length;

            Stream requestStream = request.GetRequestStream();
            requestStream.Write(parameter, 0, parameter.Length);
            requestStream.Close();

            #endregion

            //Holt sich die Antwort
            response = (HttpWebResponse)request.GetResponse();

            #region Liest die Antwort (ResponseStream) und gibt sie auf der Console aus
            Stream responseStream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(responseStream);
            Console.WriteLine(streamReader.ReadToEnd());
            streamReader.Close();
            responseStream.Close();
            #endregion

        }
    }
}

Gruß Konstantin
 
Zuletzt bearbeitet von einem Moderator:
Ich danke euch für die Antworten.
Leider konnte ich der MSDN aus Verständnisseite nichts entnehmen.

Nun aber mal eine Frage zum geposteten Code:

Was passiert hier?
request = (HttpWebRequest)WebRequest.Create(requestUrl);

Ich hatte es bisher immer so probiert, dass ich eine neue Instanz versucht habe zu erzeugen, in dem ich dann

request = new System.Web.HttpWebRequest();

verwenden wollte.

Was mich dann noch interessieren würde, warum hier ein byte Array verwendet wird und der Parameter String URLCodiert wird?
byte[] parameter = Encoding.UTF8.GetBytes(requestParameter);
 
Hallo,

Was passiert hier?
request = (HttpWebRequest)WebRequest.Create(requestUrl);
HttpWebRequest erbt von der abstrakten Klasse WebRequest.

Von HttpWebRequest kannst du keinen Konstruktor aufrufen:
C#:
protected HttpWebRequest(SerializationInfo serializationInfo, StreamingContext streamingContext);
internal HttpWebRequest(Uri uri, ServicePoint servicePoint);
internal HttpWebRequest(Uri proxyUri, Uri requestUri, HttpWebRequest orginalRequest);
Da du aber eine Instanz von HttpWebRequest brauchst musst du die statische Methode Create von WebRequest aufrufen. Dabei bekommst du ein Objekt vom Typ WebRequest zurück und da die HttpWebRequest Klasse von WebRequest erbt, musst du nur noch Casten.
http://msdn2.microsoft.com/en-us/library/ms173105.aspx

Was mich dann noch interessieren würde, warum hier ein byte Array verwendet wird und der Parameter String URLCodiert wird?

Um z.B. Parameter an eine Seite(z.B. JSP,Servlets) zu verschicken gibt es die GET Methode ,die die Parameter an die URL dranhängt.
sieht dann so aus: ww.meineHomepage.de?meinParameter1=Wert1&meinParameter2=Wert2

Dann gibt es auch noch die POST Methode, die die Parameter nicht! in der URL sondern im Body des HttpRequest's mitschickt. Und nichts anderes passiert hier auch. Die Parameter werden in den Request-Body reingeschrieben.

Gruß Konstantin
 
Ich hab eine ähnliche Problem gehabt, jedoch bekomme ich in der Zeile "request = (HttpWebRequest)WebRequest.Create(requestUrl);" die Fehlermeldung "Ungültiger URI: Wegen eines vorhandenen Doppelpunkts (":") wurde ein Anschluss erwartet, aber der Anschluss konnte nicht analysiert werden."

Meine URL sieht wie folgt aus: "http://abcde.fghij.klmno.de
 
*grmpf*
alter Fehler.... ich es den 2. Teil der URL aus nem ListView aus und mach immer
Code:
lV.CheckedItems[i].toString()
statt .Text... simpler fehler, aber trotzdem immer wieder übersehen ;) trotzdem danke
 
Weil es gerade so passt, möchte ich gerne diesen Thread wieder aus der Versenkung holen.

Ich bin gerade daran ein Single Sign On für diverse externe (Web)Applikationen in ASP.NET zu programmieren (Das heisst ein zentrales Portal, von wo aus der User per Link eine Webseite laden kann und direkt eingeloggt ist). Nach einiger Recherche habe ich allerdings herausgefunden, dass dies Auswirkungen auf die zu startende Applikation selber hat - sprich, dass diese modifiziert werden müsste oder zumindest für Single Sign On konzipiert sein müsste.

Da ich dies bei unseren externen Applikationen nicht voraussetzen kann, muss ich eine andere Lösung finden - zum Beispiel die hier (weiter oben) aufgezeigte. Ich habe das so mal umgesetzt und es funktioniert auch eingeschränkt.

Das Problem ist im allgemeinen, dass die "authentifizierte Verbindung" scheinbar jeweils Serverseitig aufgebaut wird - antstatt Clientseitig. Sprich: ich kann zwar die Seite in einem Frame anzeigen, in der der User eingeloggt ist. Klickt er aber im Frame auf irgendwas, so ist er sofort wieder ausgeloggt. Muss was mit der Session zu tun haben, die für den User nicht gilt, sondern für den Server welcher die Seite ja aufgerufen hat.

Im speziellen habe ich auch noch das Problem, dass eine der Applikationen Cookies voraussetzt und dies auch beim Login testet. Da der Server anscheinend keine Cookies akzeptiert (ist ja auch kein Browser), gibt es dort einen Fehler.

Kann mir jemand helfen? Soll ich das ganze vielleicht mal mit Silverlight Clientseitig probieren, oder wisst ihr, wie man einen "Handle" an den User weitergibt?
 
Zurück