Benutzer mit den meisten Antworten
Probleme mit der Klasse HttpWebRequest

Frage
-
Hallo NG,
mit der Klasse habe ich Probleme diese Klasse zu verstehen.
Ich möchte zum B. folgenden String übermitteln: "http://smsgate.space.net:9100/xmit?to=491774042887&from=Talk-IP&message=Software Download"
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strMessage); // Der Text
request.Credentials = new NetworkCredential(userName, password);
request.Method = "POST";
request.ContentType = "text/html; charset=\"utf-8\"";
request.Accept = "text/xml";
string antwort = String.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream receiveStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
antwort = readStream.ReadToEnd();
readStream.Close();
}
}
}
Bei:
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
Tritt eine Exception auf:
Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseHeader Detail=Auf CR muss LF folgen
Was ist falsch???
Danke für jeden Hinweis und Tipp.
Grüße Ingo
Antworten
-
wie bekomme ich aus einem String in dem ein CR vorhanden ist diesen raus?
string msg = msg.Replace(????, '');
msg.Replace("\r", "") sollte reichen, aber ob das den Fehler mit HttpWebRequest beseitigt, habe ich Zweifel.
Warum setzt du Method="POST" und einen ContentType fuer den Request, obwohl zumindest der gezeigte Code keinen Inhalt im Rumpf der Anfrage sendet?
MVP Data Platform Development My blog- Als Antwort markiert IngoManthey Mittwoch, 30. November 2011 13:07
-
http://smsgate.space.net:9100/xmit?to=xxxxxxxx&from=Talk-IP&message=SoftwareDownload ist doch einfach eine URL mit einem Querystring, da reicht vermutlich ein GET, POST macht da vermutlich keinen Sinn. Also lass die Zeilen mit dem Setzen von request.Method und ContentType mal weg. Ansonsten müsste man genau wissen, was für ein Anfrage der SMS-Provider haben will.
Beachte auch, dass es im .NET-Framework unter Umständen einfachere APIs als WebRequest/Response gibt, etwa WebClient, oder so ein XML-Dokument als Antwort erwartet wird, so erlauben die zahlreichen APIs in System.Xml wie XmlReader oder XDocument mit XmlReader einfach die URL.
MVP Data Platform Development My blog- Als Antwort markiert IngoManthey Mittwoch, 30. November 2011 13:53
Alle Antworten
-
wie bekomme ich aus einem String in dem ein CR vorhanden ist diesen raus?
string msg = msg.Replace(????, '');
msg.Replace("\r", "") sollte reichen, aber ob das den Fehler mit HttpWebRequest beseitigt, habe ich Zweifel.
Warum setzt du Method="POST" und einen ContentType fuer den Request, obwohl zumindest der gezeigte Code keinen Inhalt im Rumpf der Anfrage sendet?
MVP Data Platform Development My blog- Als Antwort markiert IngoManthey Mittwoch, 30. November 2011 13:07
-
Hallo,
zuerst einmal Danke für die Antwort.
"\r" das hatte mir gefehlt.
Warum setzt du Method="POST" und einen ContentType fuer den Request, obwohl zumindest der gezeigte Code keinen Inhalt im Rumpf der Anfrage sendet?
Das ist mein 2. Problem
Ich schicke den string "http://smsgate.space.net:9100/xmit?to=491774042887&from=Talk-IP&message=SoftwareDownload" an einen SMS Provider.
Dieser übermittelt mir, nachdem er die Daten empfangen hat, eine Antwort.
Mir ist nur nicht klar wie ich das mit der Klasse machen soll?
Danke im voraus
Grüße Ingo
-
http://smsgate.space.net:9100/xmit?to=xxxxxxxx&from=Talk-IP&message=SoftwareDownload ist doch einfach eine URL mit einem Querystring, da reicht vermutlich ein GET, POST macht da vermutlich keinen Sinn. Also lass die Zeilen mit dem Setzen von request.Method und ContentType mal weg. Ansonsten müsste man genau wissen, was für ein Anfrage der SMS-Provider haben will.
Beachte auch, dass es im .NET-Framework unter Umständen einfachere APIs als WebRequest/Response gibt, etwa WebClient, oder so ein XML-Dokument als Antwort erwartet wird, so erlauben die zahlreichen APIs in System.Xml wie XmlReader oder XDocument mit XmlReader einfach die URL.
MVP Data Platform Development My blog- Als Antwort markiert IngoManthey Mittwoch, 30. November 2011 13:53
-
Hallo NG,
sorry ich habe leider immer noch das selbe Problem wir unter 1. beschrieben:
Hier erst mal der komlette Text:
strMessage= "http://smsgate.space.net:9100/xmit?to=557192707209&from=Talk-IP&message=Softwaredownload
www.talk-ip-brasil.com.br/Downloads/Prg/v2_1_32_36-Svr5-11.sis?getwml.aspx?uname=5571111111@tip.com&pass=12345&length=128&flags=A&priority=1&vp=24";strMessage=strMessage.Replace("\r", "");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strMessagestrMessage); // Der Text
request.Credentials = new NetworkCredential(userName, password);
request.Accept = "text/xml";
string antwort = String.Empty;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream receiveStream = response.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
antwort = readStream.ReadToEnd();
readStream.Close();
}
}
}Tritt eine Exception auf:
Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseHeader Detail=Auf CR muss LF folgen
Was ist falsch???Oder wie sieht eine einfachere Klasse aus mit der ich den string incl. Username und Passwort +bertragen kann per HTML???
Danke im voraus
Ingo
- Bearbeitet IngoManthey Mittwoch, 30. November 2011 14:32
-
Gibt es irgendwo eine Beschreibung, was für eine Anfrage (HTTP Methode, Parameter, Content-Type) genau http://smsgate.space.net:9100 haben will? Die zweite "Zeile" in strMessage ist ja jetzt mit www.talk-ip-brasil.com.br/Downloads/Prg/v2_1_32_36-Svr5-11.sis?getwml.aspx?uname=5571111111@tip.com&pass=12345&length=128&flags=A&priority=1&vp=24 bis auf das fehlende "http://" am Anfang eine weitere URL mit Querystring-Parametern, das macht für mich in einer URL in der Form keinen Sinn, aber um die richtige Benutzung von WebClient oder auch (Http)WebRequest/Response vorzuschlagen, muss man halt wissen, was für eine Anfrage genau an smsgate.space.net gemacht werden soll.
MVP Data Platform Development My blog -
Hallo,
xmit?to=#RUFNUMMER#&from=#SENDER#&message=#DOWNLOAD#&length=#LENGTH#&flags=A&priority=1&vp=24
Eigentlich sollte man den String auf direkt in den IE eintragen können.
Klar die Adresse mit Port
http://smsgate.space.net:9100/
## Das sind meine Platzhalter für die Rufnummer, dem Absender, Message in diesem Fall ein Download und die Länge.
Eigentlich müßte die Message:
message=Softwaredownload
www.talk-ip-brasil.com.br/Downloads/Prg/v2_1_32_36-Svr5-11.sis?getwml.aspx?uname=5571111111@tip.com&pass=12345
Nach dem Text "Softwaredownload" ein CR/LF haben.
Ich setze den Inhal für Download:
string download = String.Empty;
if (sendSMS.LIZENZ.PROVIDER.SMSPROVIDER.XMIT)
{
fileName = fileName.Replace("?", "%3F");
fileName = fileName.Replace("\"", "%22");
fileName = fileName.Replace("&", "%26");
download = sendSMS.LIZENZ.Language.SMSTITLEDOWNLOAD + Environment.NewLine;
}die Replace muss ich auf Hinweis des SMS Provider ausführen.
fileName = download + fileName;
template = template.Replace("#DOWNLOAD#", fileName);
template = template.Replace("#LENGTH#", fileName.Length.ToString());Weil dort kein CR/LF allein ist sonder nur Environment.NewLine; komme ich mit der blöden Exception nicht weiter.
Danke für die Hilfe
Grüße Ingo
-
Tut mir leid, aber aus den Codeschnipseln heraus kann ich nicht verstehen, welche HTTP-Methode, welche Parameter, welcher Content-Type (bei Methode POST) und welcher Inhalt verlangt wird. So du wirklich innerhalb eines QueryString-Parameters Leerzeichen oder Zeilenumbrüche haben willst, dann sollten diese z.B. per http://msdn.microsoft.com/en-us/library/system.uri.escapeuristring.aspx maskiert werden.
MVP Data Platform Development My blog -
Hallo,
ich habe noch einen neuen post gemacht "Übertragung per Html". Weil ich denke ich habe mich hier schlecht ausgedrückt.
Ich verstehe nicht, wenn ich diesen String ohne CR/LF
http://smsgate.space.net:9100/xmit?to=00557192707209&from=Talk-IP&message=www.talk-ip-brasil.com.br/Downloads/Prg/v2_1_32_36-Svr5-11.sis?getwml.aspx?uname=5571111111@tip.com&pass=12345&length=110&flags=A&priority=1&vp=24
in den Internet-Explorer eintrage konnte die Frage nach dem UserNamen und dem Passwort und ich erhalte die SMS.
Wenn ich den selben string im Programm.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(der String);
request.Credentials = new NetworkCredential(Name, Pwd);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
bekomme ich hier die Exception mit dem CR/LF.
Wie kann man denn auf anderen Wegen das selbe tun als wenn ich den string im Internet-Exporer eingebe???
Danke für jeden Hinweis und Tipp.
Grüße Ingo