c# multipart/form-data soumettre par programmation
Ai donc un petit problème. Im la création d'une petite application pour automatiser une soumission de formulaire sur un site web. Mais la mauvaise chose, c'est qu'ils sont à l'aide de " multipart/form-data pour que.
Il n'existe pas de fichier téléchargement de seulement certains champs de texte pour soumission.
Bien sûr de le faire comme cela, il échoue.
string postData1 = "firstfield="+firststring+"secondfield="+secondstring;
Donc ma question est comment l'enfer post ces champs de formulaire avec multipart forme?
De poster comme des tableaux en php comme ceci:
$postdata = array('firstfield' => $firststring, 'secondfield' => $secondstring);
œuvres et transmet le formulaire, mais ne semble pas travailler avec c#
Des suggestions?
De soumission de données passe par 3 page ( base screenscrape ) login/part1/part2
Jusqu'à présent je peux me connecter avec succès et de post-part1 (utilisation normale de l'application/x-www-form-urlencoded forme )
Mais quand elle est malade essayer de poster formulaire multipart il échoue et me renvoie à part1. Alors peut-être est mon code de mal, mais ici il est:
string password = "password";
string username = "username";
string link = "http://somelink.com/";
string text = "Blah Blah some text here";
string title = "Blah Blah";
string tags1 = title;
string summary = "Blah Blah summary";
string tags = tags1.Replace(" ", ",");
//Set cookie container
CookieContainer cookieJar = new CookieContainer();
string loginData = "username=" + username + "&password=" + password + "&processlogin=1&return=%2Fsubmit.php";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://loginlink.com/login.php");
myRequest.Method = "POST";
myRequest.ServicePoint.Expect100Continue = false;
myRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 GTB6 (.NET CLR 3.5.30729)";
myRequest.Timeout = 10000;
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = loginData.Length;
myRequest.CookieContainer = cookieJar;
myRequest.KeepAlive = true;
myRequest.AllowAutoRedirect = true;
//Write post data to stream
StreamWriter myWriter = new StreamWriter(myRequest.GetRequestStream());
myWriter.Write(loginData);
myWriter.Close();
//Get the response.
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
//Open the stream using a StreamReader for easy access.
StreamReader myReader = new StreamReader(myResponse.GetResponseStream());
//Read the content.
string output = myReader.ReadToEnd();
//Clean up the streams and the response.
myReader.Close();
myResponse.Close();
Match matchkey = Regex.Match(output, "type=\"hidden\" name=\"randkey\" value=\"([^\"]+)\"", RegexOptions.IgnoreCase);
string key1 = matchkey.Groups[1].Value;
Match matchid = Regex.Match(output, "type=\"hidden\" name=\"id\" value=\"([^\"]+)\"", RegexOptions.IgnoreCase);
string id1 = matchid.Groups[1].Value;
string postData = "url=" + link + "&phase=1&randkey=" + key1 + "&id=" + id1;
HttpWebRequest myRequest2 = (HttpWebRequest)WebRequest.Create("http://submitpage1.com/submit.php");
myRequest2.Method = "POST";
myRequest2.ServicePoint.Expect100Continue = false;
myRequest2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 GTB6 (.NET CLR 3.5.30729)";
myRequest2.Timeout = 10000;
myRequest2.ContentType = "application/x-www-form-urlencoded";
myRequest2.ContentLength = postData.Length;
myRequest2.CookieContainer = cookieJar;
myRequest2.KeepAlive = true;
myRequest2.AllowAutoRedirect = true;
//Write post data to stream
StreamWriter myWriter2 = new StreamWriter(myRequest2.GetRequestStream());
myWriter2.Write(postData);
myWriter2.Close();
//Get the response.
HttpWebResponse myResponse2 = (HttpWebResponse)myRequest2.GetResponse();
//Open the stream using a StreamReader for easy access.
StreamReader myReader2 = new StreamReader(myResponse2.GetResponseStream());
//Read the content.
string output1 = myReader2.ReadToEnd();
//Clean up the streams and the response.
myReader2.Close();
myResponse2.Close();
Match matchkey1 = Regex.Match(output1, "type=\"hidden\" name=\"randkey\" value=\"([^\"]+)\"", RegexOptions.IgnoreCase);
string key2 = matchkey1.Groups[1].Value;
Match matchid1 = Regex.Match(output1, "type=\"hidden\" name=\"randkey\" value=\"([^\"]+)\"", RegexOptions.IgnoreCase);
string id2 = matchid1.Groups[1].Value;
string boundary = "-----------------------------1721856231228";
//Build up the post
StringBuilder sb = new StringBuilder();
sb.Append("\r\n" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"title\"" + "\r\n");
sb.Append("\r\n");
sb.Append(title);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"tags\"" + "\r\n");
sb.Append("\r\n");
sb.Append(tags);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"bodytext\"" + "\r\n");
sb.Append("\r\n");
sb.Append(text);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"summarycheckbox\"" + "\r\n");
sb.Append("\r\n");
sb.Append("on");
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"summarytext\"" + "\r\n");
sb.Append("\r\n");
sb.Append(summary);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"remLen\"" + "\r\n");
sb.Append("\r\n");
sb.Append("125");
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"category\"" + "\r\n");
sb.Append("\r\n");
sb.Append("1");
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"trackback\"" + "\r\n");
sb.Append("\r\n");
sb.Append("");
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"url\"" + "\r\n");
sb.Append("\r\n");
sb.Append(link);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"phase\"" + "\r\n");
sb.Append("\r\n");
sb.Append("2");
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"randkey\"" + "\r\n");
sb.Append("\r\n");
sb.Append(key2);
sb.Append("\r\n--" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"id\"" + "\r\n");
sb.Append("\r\n");
sb.Append(id2);
sb.Append("\r\n--" + boundary + "--" + "\r\n");
string postData1 = sb.ToString();
HttpWebRequest myRequest3 = (HttpWebRequest)WebRequest.Create("http://submitpage2.com/submit.php");
myRequest3.Method = "POST";
myRequest3.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 GTB6 (.NET CLR 3.5.30729)";
myRequest3.Timeout = 10000;
myRequest3.ServicePoint.Expect100Continue = false;
myRequest3.Referer = "http://bookmarkindo.com/submit.php";
myRequest3.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
myRequest3.ContentType = "multipart/form-data; boundary=" + boundary;
myRequest3.ContentLength = postData1.Length;
myRequest3.CookieContainer = cookieJar;
myRequest3.KeepAlive = true;
myRequest3.AllowAutoRedirect = true;
//Write out postdata
StreamWriter myWriter3 = new StreamWriter(myRequest3.GetRequestStream());
myWriter3.Write(postData1);
myWriter3.Close();
//Get the response.
HttpWebResponse myResponse3 = (HttpWebResponse)myRequest3.GetResponse();
//Open the stream using a StreamReader for easy access.
StreamReader myReader3 = new StreamReader(myResponse3.GetResponseStream());
//Read the content.
string output2 = myReader3.ReadToEnd();
//Clean up the streams and the response.
myReader3.Close();
myResponse3.Close();
Toutes les suggestions sont les bienvenues
OriginalL'auteur Kaido | 2010-01-09
Vous devez vous connecter pour publier un commentaire.
postes os multipart/form-data type ont une structure différente, car ils sont conçus pour le transfert de données et pas seulement le texte brut.
Voici le format:
L'aide de HTTPWebRequest vous pouvez créer une requête qui a ce format. Voici un exemple:
OriginalL'auteur Ariel
Voici un article sur formulaire multipart postes en C# avec plus de détails. Ce code a finalement été fusionnés en RestSharp, ce qui est une excellente bibliothèque que vous pouvez utiliser pour générer de la demande.
OriginalL'auteur Brian Grinstead
La meilleure façon d'envoyer multipart forme de données en C# est indiqué dans l'extrait de code, vous voyez ici que l'ajout de différents type de contenu est aussi facile que d'ajouter à l'enveloppe multipart type de contenu:
Puis il suffit de faire un appel d'api:
Ici, on s'attend à ce que le point de terminaison rest, vous devez faire un appel à l'est d'accepter un champ "titre" pour le fichier et le tableau d'octets d'un fichier appelé "fichier".
OriginalL'auteur Shubham Awasthi
Le format de
multipart/form-data
est présentée ici: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2.OriginalL'auteur Quick Joe Smith