Necesito hacer un HTTP POST usando C#. Necesita hacer una devolución de datos de la misma manera que una página IE6.Publicación de HTTP como IE6 usando C#
De la documentación de la devolución de datos debe ser similar
POST /.../Upload.asp?b_customerId=[O/M1234] HTTP/1.1
Content-length: 12345
Content-type: multipart/form-data; boundary=vxvxv
Host: www.foo.com
--vxvxv
Content-disposition: form-data; name=”File1”; filename=”noColonsSpacesOrAmpersandsInHere”
Content-type: text/xml
<?xml version=”1.0” encoding=”UTF-8”?>
...
<bat:Batch ...
.......
</bat:Batch>
--vxvxv--
Creo que estoy teniendo problemas con los caracteres de contorno. Traté de establecer el límite en los datos de la publicación y violín muestra algo similar, pero me devuelve una página con el error "Llamada o argumento de procedimiento no válido". la disposición de contenido está en el cuerpo en lugar del encabezado para mantenerlo dentro de los límites. No estoy seguro de que sea correcto. ¿Estoy estableciendo el límite de la manera correcta? ¿Alguien puede dar alguna orientación sobre cómo hacer un HTTP POST de estilo IE6 usando C#? Gracias
Mi Código
data = "--vxvxv" + Environment.NewLine +
"Content-disposition: form-data; name=\"File1\";" + Environment.NewLine +
"filename=\"provideTest.xml\"" + Environment.NewLine +
"Content-type: text/xml" + Environment.NewLine +
@"<?xml version=""1.0"" encoding=""UTF-8""?>" + Environment.NewLine +
data + Environment.NewLine +
"--vxvxv--";
var encoding = ASCIIEncoding.UTF8;
HttpWebRequest request;
var postData = encoding.GetBytes(data);
request = (HttpWebRequest)WebRequest.Create(url);
request.ContentLength = postData.Length;
request.Method = "POST";
request.ContentType = "multipart/form-data; boundary=vxvxv";
request.Host = "www.foo.com";
request.ContentLength = postData.Length;
X509Certificate2Collection certCollect = new X509Certificate2Collection();
X509Certificate2 cert = new X509Certificate2(@"C:\a\cert.pfx", "password");
certCollect.Add(cert);
request.ClientCertificates = certCollect;
using (Stream writeStream = request.GetRequestStream()) {
writeStream.Write(postData, 0, postData.Length); }
WebResponse webResponse = request.GetResponse();
string output = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
LogEntry.Write("Recieved : " + output);
return output;
violinista de salida (en bruto)
POST https://../Upload.asp?b_customerId=%5BO/M1234%5D HTTP/1.1
Content-Type: multipart/form-data; boundary=vxvxv
Host: www.foo.com
Content-Length: 5500
Expect: 100-continue
Connection: Keep-Alive
--vxvxv
Content-disposition: form-data; name="File1";
filename="provideTest.xml"
Content-type: text/xml
<?xml version="1.0" encoding="UTF-8"?>
...SNIP...
</bat:Batch>
--vxvxv--
Lo primero que viene a la mente es que su nombre de archivo está en una nueva línea que no debería ser. No se sabe si esto causará el error mencionado, pero probablemente confundirá mucho las cosas al menos. – Chris
Bastante seguro de que eso lo invalidaría. – kamranicus
Lo intenté sin la nueva línea. Mismo resultado –