Buchung über POST von C# über https
Nach verschwenden zwei Tage mit diese Frage (und versuchen, damit es funktioniert), habe ich beschlossen, einen Schritt zurück zu gehen und Fragen, eine grundlegende Frage, denn anscheinend gibt es etwas, was ich nicht weiß oder ich falsch mache.
Die Anforderungen sind einfach, die ich brauche, um eine HTTP-post (vorbei an ein paar Werten) über https von C#.
Die website (wenn Sie die entsprechenden Werte ein) zurückkehren wird, einige einfache html-und einen response-code. (zeige ich später).
Es ist wirklich , dass einfach. Der "webservice" funktioniert. Ich habe ein php-Beispiel, das funktioniert und erfolgreich mit ihm verbindet. Ich habe auch ein Dephi "demo" - Anwendung (mit source code), das funktioniert auch. Und endlich habe ich die demo-Anwendung (Binär) aus dem Unternehmen hat der "service", dass funktioniert auch, natürlich.
Aber ich muss es tun durch C#. ,, Das klingt so einfach, ist es funktioniert nicht.
Zu Testzwecken habe ich eine einfache Konsolenanwendung und eine einfache Methode connect. Ich habe versucht, wie 7 verschiedene Möglichkeiten zum erstellen einer HTTP-Anforderung, die alle mehr oder weniger das gleiche, unterschiedliche Umsetzung (Mit WebClient, mit HttpWebRequest, etc).
Jede Methode, die funktioniert, außer, wenn die URI beginnt mit "https".
Bekomme ich eine webexception sagen, dass der remote-server zurückgegeben 404. Ich habe Fiddler installiert (wie vorgeschlagen, durch eine SO "user"), und untersucht eine wenig Verkehr. Der 404 ist, weil ich die übergabe etwas falsch, denn wie ich später erwähnt, die 'service' arbeitet. Ich werde sprechen über die fiddler Ergebnisse später.
Die URL, wo ich die Daten POSTEN, ist: https://servicios.mensario.com/enviomasivo/apip/
- Und das ist der POST-Daten: (die Werte sind fakes)
usuario=SomeUser&clave=SomePassword&nserie=01234567890123456789&version=01010000&operacion=220
Den server zurückgeben könnte eine zwei/drei-Zeilen-Antwort (sorry für die spanischen, aber die Firma ist aus Spanien). Hier ist ein Beispiel für eine mögliche Antwort:
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 100 BIEN
998
Und hier ist ein weiteres
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 20 AUTENTIFICACION NEGATIVA
Ha habido un problema en la identificación ante el servidor. Corrija sus datos de autentificacion.
Dem 1. bedeutet "OK", und die 2. ist die Auth Failure.
Wie Sie sehen können, die Aufgabe ist ganz einfach, nur es funktioniert nicht. Wenn ich fiddler, sehe ich, dass es eine Art von SSL-Zeug geht in die Verbindung und dann funktioniert alles einwandfrei. Jedoch, soweit ich gelesen habe .NETTO-Griffe, dass alle Sachen für uns (ja, ich habe den Rückruf zu überprüfen ungültig certs). Ich verstehe nicht, was ich falsch mache. Ich kann post/E-Mail den code, aber was ich wissen möchte ist ganz einfach:
Wie können Sie einen BEITRAG über SSL mithilfe von C# und eine "einfache" HttpWebRequest " und später haben die Antwort in einem string/array/Was auch immer für die Verarbeitung?
Vertrauen Sie mir, wenn ich sage, ich habe schon googeln und Stackoverflowing für zwei Tage. Ich habe nicht jede Art von proxy. Die Verbindung geht über meinen router. Standard-ports. Nichts besonderes. Meine Maschine innerhalb einer virtuellen VMWare-Maschine und Windows Vista, aber angesichts der Tatsache, dass die sample-Applikationen (php, delphi, Binär) alle funktionieren ohne Probleme, ich kann nicht sehen, dass ein problem).
Den verschiedenen Proben sans (die binary) verfügbar sind hier wenn jemand will, um einen Blick zu nehmen auf Sie.
Ich würde schätzen jede Hilfe. Wenn jemand will, um zu versuchen, mit einer "echten" Benutzernamen, ich habe einen demo-Benutzer, und ich konnte passieren Sie die user/pass für Testzwecke. Ich habe nur eine demo-Benutzer (die, die Sie mir gegeben) und deswegen bin ich auch nicht einfügen es hier. Ich will nicht, um die Flut der Benutzer mit tests 😉
Ich versucht habe (in den Proben) mit UTF8 und ASCII, aber nicht, irgendetwas zu ändern.
Ich bin 100% positiv, dass ich etwas zu tun haben mit SSL und ich mache es nicht, weil ich es nicht wissen.
Vielen Dank im Voraus.
Martín.
InformationsquelleAutor Martin Marconcini | 2009-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
siehe meine Antwort auf Ihre andere Frage. Ich glaube, dein problem kann nicht mit Ihrem C# - code. Der web-service-URL accually gibt einen 404 mit mehreren anderen tools, die ich verwendet, aber es gibt die Antwort, die Sie angegeben, wenn Sie verlassen aus der trailing slash aus der web-service-URL, so schlage ich vor, Sie versuchen, dass.
Seltsam, es scheint nicht egal, wenn die nachfolgende URL ist, wenn nicht tut, SSL. Etwas merkwürdig mit diesen web-server, Schätze ich.
Moral Von der Geschichte: Immer dreifach überprüfen, was "andere Entwickler", sagen Sie. (Die web-server-Programmierer Bestand darauf, dass der URL der Schrägstrich, und ich habe ihm geglaubt). :S
InformationsquelleAutor Erv Walter
Ich kämpfte mit dem exakt gleichen problem, ein bisschen früher (obwohl im compact framework). Hier ist meine Frage und meine eigene Antwort darauf:
Asynchronen WebRequest mit POST-Parametern .NET Compact Framework
Meine version ist asynchron, es ist also ein wenig komplexer als das, was du suchst, aber die Idee bleibt.
Menno, tut mir Leid wegen der Tippfehler. Ich werde befestigen Sie Sie in die Antwort sofort. Wenn es 404, die Sie bekommen, dann liegt das problem nicht in den code, die Sie gerade senden die falsche url. Einige breakpoints in den code senden der request-und Doppel-dreifach überprüfen, dass die url, die Sie uns zur Verfügung stellen der Uri-Konstruktor gültig ist. Und ja, natürlich können Sie überspringen die Anmeldeinformationen-Teil, ich werde kommentieren, dass aus!
Oh, und auch ich brauche zum ändern des content-type auf "application/x-www-form-urlencoded", wie Sie die regelmäßige Zusendung von POST-params. In meinem Fall war ich das senden von XML in der post-params Bereich, und es beauftragt, dass der content-type.
Danke Tommi, war es, als Sie auch angezeigt, ein problem mit der URL (mit Endung Schrägstrich). 🙂 Vielen Dank für den code 🙂 ich werde sicherlich verwenden.
Ich empfehle, die asynchrone version, die sich in den link in meiner Antwort. Beim senden von (potenziell träge) web-Anfragen, es ist immer eine gute Sache, um den Haupt-thread schön und Ansprechend, während die Daten abgerufen werden.
InformationsquelleAutor Tommi Forsström
weiß nicht, ob u bereits dieses Problem behoben, es ist ein post von vor einem Jahr. Ich bin Spanisch und ich bin mit mensario zu.
senden und http-Requests: (dies ist in ASP, aber der Prozess ist der gleiche)
Das einzige, was, das ich nicht habe, ist einen Benutzernamen /Kennwort für einen Versuch 🙂
Etwar, wenn die Antwort ist "100 " bien" die Funktion gibt, sonst gibt es Fehler.Hoffe es hilft 🙂
InformationsquelleAutor jorge