Dopo aver sprecato due giorni con this question (e cercando di farlo funzionare), ho deciso di fare un passo indietro e fare una domanda di base, perché a quanto pare c'è qualcosa che non conosco o sto sbagliando.Pubblicazione tramite POST da C# su https
I requisiti sono semplici, Ho bisogno di fare un post HTTP (passando alcuni valori) su https da C#.
Il sito Web (se fornito i valori appropriati) restituirà alcuni semplici codici html e di risposta. (lo mostrerò più tardi).
È davvero quello semplice. Il "webservice" funziona. Ho un campione php che funziona e si connette con successo ad esso. Ho anche un'applicazione Dephi "demo" (con codice sorgente) che funziona anche. E infine ho l'applicazione demo (binaria) della compagnia che ha il "servizio", che ovviamente funziona anche.
Ma ho bisogno di farlo attraverso C#. Sembra così semplice, non funziona.
A scopo di test, ho creato una semplice app per console e un semplice metodo di connessione. Ho provato 7 modi diversi per creare una richiesta HTTP, più o meno la stessa cosa, un'implementazione diversa (utilizzando WebClient, usando HttpWebRequest, ecc.).
Ogni metodo funziona, eccetto quando l'URI inizia con "https".
Ricevo un'eccezione web che dice che il server remoto ha restituito 404. Ho installato Fiddler (come suggerito da un utente SO) e ho analizzato un po 'il traffico. Il 404 è perché sto passando qualcosa di sbagliato, perché come ho detto più tardi, il "servizio" funziona. Parlerò dei risultati del violinista più tardi.
L'URL dove devo pubblicare il dato è: https://servicios.mensario.com/enviomasivo/apip/
E questo è il dato POST: (i valori sono falsi)
usuario = QualcheUtente & clave = UnaPassword & nserie = versione = 01010000 & operacion = 220
Il server può restituire una risposta di due/tre righe (mi dispiace per lo spagnolo, ma la società è spagnola). Ecco un esempio di una possibile risposta:
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 100 BIEN
998
Ed ecco un altro
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.
Il 1 ° uno significa OK, e il 2 ° è Auth Failure.
Come si può vedere l'attività è piuttosto facile, solo che non funziona. Se uso il violinista, vedo che c'è una sorta di roba SSL in corso nella connessione e quindi tutto funziona correttamente. Tuttavia, per quanto ho letto, .NET gestisce tutte queste cose per noi (sì, ho aggiunto il callback per convalidare sempre i certificati non validi). Non capisco cosa sto sbagliando.Posso inviare/inviare via email il codice, ma quello che mi piacerebbe sapere è molto semplice:
Come si può fare un POST su SSL usando C# e un "semplice" HttpWebRequest e più tardi avere la risposta in una stringa/array/Qualunque cosa sia l'elaborazione?
Fidati di me quando dico che sono stato googling e Stackoverflowing per due giorni. Non ho alcun tipo di proxy. La connessione passa attraverso il mio router. Porte standard Nulla di bello. La mia macchina si trova all'interno di una macchina virtuale VMWare ed è Windows Vista, ma dato che le applicazioni di esempio (php, delphi, binary) funzionano tutte senza problemi, non la vedo come un problema).
I diversi campioni (senza il binario) sono disponibili here se qualcuno vuole dare un'occhiata a loro.
Apprezzerei qualsiasi aiuto. Se qualcuno vuole provare con un nome utente "reale", ho un utente demo e potrei passarti l'utente/pass a scopo di test. Ho solo un utente demo (quello che mi hanno dato) ed è per questo che non lo sto incollando qui. Non voglio inondare l'utente con i test;)
Ho provato (all'interno degli esempi) utilizzando UTF8 e ASCII, ma ciò non ha cambiato nulla.
Sono sicuro al 100% che c'è qualcosa che devo fare con SSL e non lo sto facendo perché non lo so.
Grazie in anticipo.
Martín.
Erv, è stato così! Molte grazie. (E grazie agli altri poster per gli esempi, userò sicuramente un mix di tutti questi elementi. Sei il mio eroe, come ho affermato nell'altra domanda :) :) –
Morale della storia: controlla sempre cosa " altri sviluppatori "te lo dico. (Il programmatore del server Web ha insistito sul fatto che l'URL avesse la barra e io gli credevo). : S –