ich stehe vor folgendem Problem und finde leider allein keine L�sung:
Ich muss zu einem Server per HTTP mich anmelden und folgenden string
�bermitteln. Danach muss ich die Antwort auswerten.
http request mit 'Username:Password' an port 9100
Dann folgenden string �bermitteln:
/wappush?to=0049123456788&from=test&server=www.ip.de%2Fdownloads%2Fsym92%2Fpublic%2Fptt_v2_1_32_16.sis&title=Softwaredownload&flags=A
HTTP/1.1
Ich habe leider �berhaupt keinen Plan wie ich mit der .NET lib machen kann.
Danke f�r jeden Tipp und Hinweis.
Gr��e Ingo
ingo schrieb:
> ich stehe vor folgendem Problem und finde leider allein keine L�sung:
> Ich muss zu einem Server per HTTP mich anmelden und folgenden string
> �bermitteln. Danach muss ich die Antwort auswerten.
>
> http request mit 'Username:Password' an port 9100
>
> Dann folgenden string �bermitteln:
> /wappush?to=0049123456788&from=test&server=www.ip.de%2Fdownloads%2Fsym92%2Fpublic%2Fptt_v2_1_32_16.sis&title=Softwaredownload&flags=A
>
> HTTP/1.1
Dazu kannst Du die Klasse 'HttpWebRequest' benutzen. Die Methode
'Create' erwartet u.a. den URI der Ressource, etwa in der Form
"www.example.org:<Portnummer>". �ber die Eigenschaft 'Credentials'
kannst Du die HTTP-Zugangsdaten �bergeben.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
dan ke f�r den Tipp. Das werde ich gleich mal ausprobieren.
Gr��e Ingo
ich sehe gerade: HINWEIS: Diese API ist mittlerweile veraltet.
Ist Dir eine Nachfolgeclasse bekannt?
Danke im voraus
Gr��e Ingo
"ingo" <ingo.m...@ingomanthey.de> schrieb:
> ich sehe gerade: HINWEIS: Diese API ist mittlerweile veraltet.
Welche API?
> Ist Dir eine Nachfolgeclasse bekannt?
Zu HttpWebRequest? Oder was meinst Du?
--
Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
Wo siehst Du diesen Hinweis? Ich sehe ihn in der aktuellen
Onlinedokumentation nicht:
WebRequest.Create Method (String) (System.Net)
<URL:http://msdn.microsoft.com/en-us/library/bw00b1dc.aspx>
HttpWebRequest Class (System.Net)
<URL:http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx>
ich stehe leider vor dem Problem, das ich mein Programm nicht testen kann,
da der Empf�nger meine IP registriert haben muss und ich eine variable IP
habe. Au�erdem ist mein Auftraggeber 10.000 km entfernt. Deshalb meine
Bitte, schaut euch mal den Code an und teilt mir bitte mit was falsch ist.
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create("http://xyz.net:9100");
request.Credentials = new
NetworkCredential("UserName", "Passwort");
request.PreAuthenticate = true;
request.KeepAlive = true;
Diesen String will ich �bermitteln:
string postData =
"/wappush?to=0049123456788&from=test&server=www.ip.de%2Fdownloads%2Fsym92%2Fpublic%2Fptt_v2_1_32_16.sis&title=Softwaredownload&flags=A"
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
request.ContentLength = byte1.Length;
using (Stream newStream =
request.GetRequestStream())
{
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
}
Antwort:
using (HttpWebResponse response =
(HttpWebResponse)request.GetResponse())
{
using (Stream receiveStream =
response.GetResponseStream())
{
using (StreamReader readStream = new
StreamReader(receiveStream, Encoding.UTF8))
{
antwort = readStream.ReadToEnd();
readStream.Close();
}
}
response.Close();
}
request.Abort();
Danke im voraus.
Gr��e Ingo
danke f�r die links. Einiges hatte ich ja inzwischen auch gefunden. Ich
glaube auch das ich jetzt die L�sung habe. Ich habe diese mla hier gepostet,
weil ich leider keine M�glichkeit habe das zu testen.
Wenn ich von der NG nichts negatives h�re schicke ich meinen Auftraggeber
ein kleines Testprogramm. Dann kann ich die Methoden in meine Programm
einbauen.
Noch einmal 1.000 Dank f�r Deine Hilfe. Ohne Deinen Tipp h�tte ich auf der
Stelle getreten, da ich mit Web au�er FTP nichts gemacht habe.
Gr��e Ingo
Zu meinem Post wegen der veralteten Klasse:
Ich habe einfach falsch gelesen es ging nur um den Konstruktor der ist als
veraltert gekennzeichnet.
"ingo" schrieb:
> Ich habe diese mla hier gepostet,
a) seh ich nix und b) sollte man hier nur den Code, aber keine Binaries
(also Attachments) posten.
> weil ich leider keine M�glichkeit habe das zu testen.
Bitte? Ist nicht dein Ernst, oder? Die Aussage selbst ist ja schon sehr
"komisch" aber an was sollte ein Test eines HttpWebRequest Aufrufs scheitern?
Hast Du keine Entwicklungsumgebung? Falls ja, lad sie dir hier runter:
http://www.microsoft.com/germany/Express/
> Wenn ich von der NG nichts negatives h�re schicke ich meinen Auftraggeber ein kleines Testprogramm.
�hm. Auftraggeber? Nicht testen? Auf NG Antworten (die ggfs. gar nicht
kommen) verlassen und dem Kunden dann einfach mal was schicken?
ich schon geschrieben, ich kann leider nicht testen, ob die Anmeldung
richtig ankommt. Auch nicht ob ich die Antwort vom Server erhalte.
<�hm. Auftraggeber? Nicht testen? Auf NG Antworten (die ggfs. gar nicht
kommen) verlassen und dem Kunden dann einfach mal was schicken?>
Das ist auch �berhaupt nicht mein Stil! Dieses ist auch leider die einzige
Funktion welche ich unter den gegebenen Umst�nden nicht testen kann.
Danke im voraus, f�r jeden der an dem Code seinen Kommentar abgibt!!!
Hier nocheinmal mein Code:
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create("http://firma.net:9100");
request.Credentials = new NetworkCredential("User",
"password");
request.PreAuthenticate = true;
request.KeepAlive = true;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
request.ContentLength = byte1.Length;
using (Stream newStream = request.GetRequestStream())
{
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
}
string antwort = String.Empty;
Hallo Ingo,
ein einfacher Weg es zu testen wäre, einen eigenen HTTP Server lokal zu
starten, diesem den Request zu senden und dann auszuwerten, ob alle
Parameter so ankommen wie das Programm abgeschickt hat.
Einen kleinen HTTP Server kann man in C# zum Beispiel mittels http.sys
in wenigen Zeilen schreiben. Ich habe es selber noch nicht gemacht, aber
Informationen dazu findet man im Internet reichlich:
http://mikehadlow.blogspot.com/2006/07/playing-with-httpsys.html
Damit hat man natürlich keine Garantie, dass das Echtsystem genauso mit
dem POST funktionieren wird. Es erlaubt erste 'smoke-tests', bevor man
auf das Echtsystem geht ...
Viele Grüße,
--
Michael Justin
SCJP, SCJA
betasoft - Software for Delphi™ and for the Java™ platform
http://www.mikejustin.com - http://www.betabeans.de
wo ich diesen Code sehe, habe ich noch eine kleine Frage, nur um sicher zu
gehen, dass ich da nichts falsch verstanden habe ...
Der Dispose Aufrauf schliesst ja auch die Resourrcen, so dass man die
expliziten Aufrufe schlicht weglassen k�nnen sollte. Oder sehe ich das
falsch und man sollte immer noch die Close() Aufrufe mit implementieren?
Bei mir s�he der Codeabschnitt halt einfach so aus:
string antwort;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader readStream = new
StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
antwort = readStream.ReadToEnd();
}
Also neben meiner Frage h�tte ich mir ein using Statement gespart. Der
Stream wird durch das Dispose vom StreamReader geschlossen, so dass es hier
imho keine Probleme mit nicht freigegebenen Ressourcen geben sollte. (Lasse
mich aber hier auch gerne belehren, falls dies Problematisch sein k�nnte.)
Danke schon einmal f�r eure Antworten.
Mit den besten Gr��en,
Konrad
danke für den link.
Ich habe ein kleine Testprogramm geschrieben, welches ich den Kunden mit den
Bitte das mal laufen zu lassen zusenden werde, bevor ich die Methoden in
mein Projekt implementiere.
Grüße Ingo
Konrad Neitzel schrieb:
> Der Dispose Aufrauf schliesst ja auch die Resourrcen, so dass man die
> expliziten Aufrufe schlicht weglassen k�nnen sollte. Oder sehe ich das
> falsch und man sollte immer noch die Close() Aufrufe mit implementieren?
>
> Bei mir s�he der Codeabschnitt halt einfach so aus:
> string antwort;
> using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
> using (StreamReader readStream = new
> StreamReader(response.GetResponseStream(), Encoding.UTF8))
> {
> antwort = readStream.ReadToEnd();
> }
>
> Also neben meiner Frage h�tte ich mir ein using Statement gespart. Der
> Stream wird durch das Dispose vom StreamReader geschlossen, so dass es
> hier imho keine Probleme mit nicht freigegebenen Ressourcen geben
> sollte. (Lasse mich aber hier auch gerne belehren, falls dies
> Problematisch sein k�nnte.)
Das ist korrekt (weil es so spezifiziert ist).
ich habe mein Programm mal versucht zu testen. Wie schon geschrieben das ich
keine feste IP habe, kann ich mich an den anderen Server nicht anmelden.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = new
NetworkCredential(sendSMS.LIZENZ.PROVIDER.SMSPROVIDER.USERNAME,
sendSMS.LIZENZ.PROVIDER.SMSPROVIDER.PASSWORT);
request.PreAuthenticate = true;
request.KeepAlive = true;
ASCIIEncoding encoding = new ASCIIEncoding();
message = message.Replace("\\", "%2f");
byte[] byte1 = encoding.GetBytes(xmlVorlage);
request.ContentLength = byte1.Length;
using (Stream newStream = request.GetRequestStream())
{
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
}
Nun mein Problem:
In der Zeile using (Stream newStream = request.GetRequestStream()) bekomme
ich eine ProtocolViolationException
Inhaltsteil mit diesem Verbtyp kann nicht gesendet werden.
Kann mir jemand helfen was ich falsch gemacht habe?
Hier die Message:
/wappush?to=004915118461084&from=firma&server=www.visutip.de%2Fdownloads%2Fsym92%2Fpublic%2Fptt_v2_1_32_16.sis&title=Softwaredownload&flags=A
HTTP/1.1
Danke im voraus f�r jeden Hinweis und Tipp
Gr��e Ingo
Bist Du sicher, da� dieser Text nicht Teil des URI sein soll? Nat�rlich
h�ngt das von der Schnittstelle ab, die Du ansteuern willst.
danke f�r den Tipp. Da Frage ich mal den Provider in Deutschland an.
Gr��e Ingo