envoyer un fichier en methode POST

envoyer un fichier en methode POST - C#/.NET managed - Programmation

Marsh Posté le 26-10-2007 à 19:58:41    

Bonjour,
 
 je dois automatiser l'envoi de fichiers (videos) vers cette addresse: http://upload.youporn.com/ dans un programme .NET
 
step1 envoi la form vers step1.php.  
step1.php est rechargé avec le code html suivant  
 
 

Code :
  1. <form action="/upload/step2" method="post" enctype="multipart/form-data" onsubmit="show_progress(); return true;">
  2.                      ....
  3.       <td><p><input class="url" name="file" type="file" /></p></td>
  4.               ....
  5.     <fieldset style="text-align: center;" class="nolegend">
  6.      <input class="submit" value="Upload" type="submit">
  7.     </fieldset>
  8.     <input type="hidden" name="title" value="titlezzz" />
  9.     <input type="hidden" name="type" value="straight" />
  10.     <input type="hidden" name="description" value="description" />
  11.     <input type="hidden" name="tags" value="tags ff" />
  12.     <input type="hidden" name="email" value="ff@example.com" />
  13.     <input type="hidden" name="usview" value="no" />
  14.     <input type="hidden" name="site_name" value="" />
  15.     <input type="hidden" name="site_url" value="http://" />
  16.    </form>


 
le submit envoi le tout vers step2.php
Jessai donc d'envoyer tout directement à step2.php (puisque step 1 ne fait que recupérer les valeurs des champs et  les mettres en dans des input type="hidden" )
 
Le probleme est que la reponse serveur apres l'upload est la page /step1 avec les champs du formulaire remplis (avec un cadre <div class="error"> vide... comme si javais oublier un parametre) au lieu de step2.php (upload completed)
 
Ce n'est pas un probleme de cookies puisque on peu envoyer des videos avec les cookies desactivés
Jaimerai comprendre dou vien le probleme
 
voici mon code .NET
 

Code :
  1. Dim content_type As String = "video/mpeg"
  2.         querystring("file" ) = "filename=" & Chr(34) & upf._Fullpath & Chr(34) & " " & "Content-Type: " & content_type
  3.         querystring("title" ) = upf._title
  4.         querystring("type" ) = upf._Genre
  5.         querystring("description" ) = upf._Desc
  6.         querystring("tags" ) = upf._Tags
  7.         querystring("email" ) = upf._Email
  8.         querystring("usview" ) = "yes"
  9.         querystring("site_name" ) = upf._SiteName
  10.         querystring("site_url" ) = upf._SiteUrl
  11.         w.QueryString = querystring
  12.         w.Encoding = System.Text.Encoding.UTF8
  13.         Dim userAgent As String = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
  14.         Dim accept As String = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*"
  15.         Dim accept_encoding As String = "gzip, deflate"
  16.         lbl_currentfile.Text = upf._title
  17.         w.Headers.Add(HttpRequestHeader.AcceptEncoding, accept_encoding)
  18.         w.Headers.Add(HttpRequestHeader.AcceptLanguage, "fr" )
  19.         w.Headers.Add(HttpRequestHeader.CacheControl, "no-cache" )
  20.         w.Headers.Add(HttpRequestHeader.KeepAlive, "true" )
  21.         w.Headers.Add(HttpRequestHeader.ContentType, content_type)
  22.         w.Headers.Add(HttpRequestHeader.Referer, YOUPORNURLS.PORN_UPLOAD_REFERER)
  23.         w.Headers.Add(HttpRequestHeader.UserAgent, userAgent)
  24.         w.UploadFileAsync(New Uri(YOUPORNURLS.PORN_UPLOAD), "POST", upf._Fullpath)


Message édité par F A Z Z le 26-10-2007 à 20:07:54
Reply

Marsh Posté le 26-10-2007 à 19:58:41   

Reply

Marsh Posté le 30-10-2007 à 15:35:36    

bon bein obliger de se débrouiller... pour ceux ke sa intersse jai fait comme sa et sa marche
 

Code :
  1. Public Class UploadFormFile
  2.     Public Shared Function PrepareDatasToSend(ByVal filepath As String, ByVal fileFormName As String, ByVal contenttype As String, ByVal querystring As Specialized.NameValueCollection, ByVal boundary As String) As Byte()
  3.         If (fileFormName Is Nothing) OrElse (fileFormName.Length = 0) Then
  4.             fileFormName = "file"
  5.         End If
  6.         If (contenttype Is Nothing) OrElse (contenttype.Length = 0) Then
  7.             contenttype = "application/octet-stream"
  8.         End If
  9.         Dim Startboundary As New System.Text.StringBuilder()
  10.         Startboundary.Append("--" )
  11.         Startboundary.Append(boundary)
  12.         Startboundary.Append(vbCrLf)
  13.         Startboundary.Append("Content-Disposition: form-data; name=""" )
  14.         Startboundary.Append(fileFormName)
  15.         Startboundary.Append("""; filename=""" )
  16.         Startboundary.Append(filepath)
  17.         Startboundary.Append("""" )
  18.         Startboundary.Append(vbCrLf)
  19.         Startboundary.Append("Content-Type: " )
  20.         Startboundary.Append(contenttype)
  21.         Startboundary.Append(vbCrLf)
  22.         Startboundary.Append(vbCrLf)
  23.         'ajoute les paires nom/valeurs
  24.         Dim Endboundary As New System.Text.StringBuilder()
  25.         If querystring IsNot Nothing Then
  26.             Endboundary.Append(vbCrLf)
  27.             For Each key As String In querystring.Keys
  28.                 Endboundary.Append("--" & boundary)
  29.                 Endboundary.Append(vbCrLf)
  30.                 Endboundary.Append("Content-Disposition: form-data; name=" & Chr(34) & key & Chr(34))
  31.                 Endboundary.Append(vbCrLf)
  32.                 Endboundary.Append(vbCrLf)
  33.                 Endboundary.Append(querystring.[Get](key))
  34.                 Endboundary.Append(vbCrLf)
  35.             Next
  36.         End If
  37.         Endboundary.Append("--" & boundary)
  38.         Endboundary.Append(vbCrLf)
  39.         Dim postHeader As String = Startboundary.ToString()
  40.         Dim postHeaderBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postHeader)
  41.         Dim postFooter As String = Endboundary.ToString
  42.         Dim postFooterBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postFooter)
  43.         Dim fileBytes() As Byte = My.Computer.FileSystem.ReadAllBytes(filepath)
  44.         Dim lenght As Integer = postHeaderBytes.Length + fileBytes.Length + postFooterBytes.Length - 1
  45.         Dim dataPaquet(lenght) As Byte
  46.         Array.Copy(postHeaderBytes, dataPaquet, postHeaderBytes.Length)
  47.         Array.Copy(fileBytes, 0, dataPaquet, postHeaderBytes.Length, fileBytes.Length)
  48.         Array.Copy(postFooterBytes, 0, dataPaquet, fileBytes.Length + postHeaderBytes.Length, postFooterBytes.Length)
  49.         Return dataPaquet
  50.     End Function
  51. End Class


 

Code :
  1. Sub BeginUpload()
  2.  dim w as new webclient
  3.         Dim querystring As New Specialized.NameValueCollection()
  4.  'ajouter les champs du formulaire
  5.         querystring("nom" ) = valeur
  6.         w.Encoding = System.Text.Encoding.UTF8
  7.    
  8.  'preparer l'entete de la requete
  9.         Dim userAgent As String = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"
  10.         Dim accept As String = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*"
  11.         Dim accept_encoding As String = "gzip, deflate"
  12.         Dim accept_charset As String = "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
  13.        
  14.         Dim boundary As String = "---------------------------" + DateTime.Now.Ticks.ToString("x" )
  15.         w.Headers.Add(HttpRequestHeader.AcceptEncoding, accept_encoding)
  16.         w.Headers.Add(HttpRequestHeader.AcceptLanguage, "fr" )
  17.         w.Headers.Add(HttpRequestHeader.CacheControl, "no-cache" )
  18.         w.Headers.Add(HttpRequestHeader.KeepAlive, "true" )
  19.         w.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=" & boundary)
  20.         w.Headers.Add(HttpRequestHeader.Referer, YOUPORNURLS.PORN_UPLOAD_REFERER)
  21.         w.Headers.Add(HttpRequestHeader.UserAgent, userAgent)
  22.         w.Headers.Add(HttpRequestHeader.Accept, accept)
  23.         w.Headers.Add(HttpRequestHeader.AcceptCharset, accept_charset)
  24.  dim filePath as string = "c:\exemple.mpg"
  25.  dim MIMEtype as string = "video/mpeg" ' faire une methode pour determiner le mime type
  26.         Dim datas() As Byte = UploadFormFile.PrepareDatasToSend(filePath, "",MIMEtype, querystring, boundary)
  27.         w.UploadData(New Uri("http://localhost/Upload.php" ), "POST", datas)
  28. end sub

Reply

Marsh Posté le 31-10-2007 à 08:38:38    

YOUPORNURLS.PORN_UPLOAD_REFERER => skoi ce truc ? :lol:
 
Sinon, pourquoi dans ton premier post tu écrit dans querystring ? Pas tout capté ce que tu faisais. Normalement c'est readonly QueryString (enfin... pas persistant en tout cas, donc pas trop de raison d'écrire dedans)
 
Et enfin, pourquoi ne pas passer par la classe System.Net.WebClient ?
=> C'est comme chez Casto, y'a tout s'ky faut.

Reply

Marsh Posté le 28-11-2007 à 10:18:16    

La class web client ne permet pas d'envoyer des infos genre nom/valeur ou des cookies
Querystring c'est pas readonly. Elle sera concaténé à l'addresse URL au moment de lenvoi

Reply

Marsh Posté le 28-11-2007 à 10:22:27    

Fazz t'es mon héro

Reply

Marsh Posté le 12-03-2009 à 17:01:12    

Ce code je le cherche ça fait longtemps  
mais :( je n'arrive pas à le faire executé  
c'est quoi le problème !!!!!!!!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed