2010-12-31 14 views
1

単純なテキストデータをマルチパート形式のCGIに送信しようとしています。HttpWebRequest multipartフォームデータ

問題は..私はフォームデータをどのようにフォーマットするのか分からない!要するに、私のシステムでは、ポストデータを含む文字列を準備し、request.GetRequestStream()を使用してストリームライターを作成し、そのストリームライターにポストストリングを直接書き込みます。その後、ストリームライターを閉じて要求を送信します。

私はそうと、文字列の書式を設定しようとしている:「Param1を= sometext & PARAM2 = sometext」が、私はエラーを返します:

Unhandled Exception: System.Net.WebException: The remote server returned an error: (417) Expectation Failed. 
    at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x002d9] in /private/tmp/monobuild/build/BUILD/mono-2.8/mcs/class/System/System.Net/HttpWebRequest.cs:1425 
    at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00143] in /private/tmp/monobuild/build/BUILD/mono-2.8/mcs/class/System/System.Net/HttpWebRequest.cs:1250 

は明らかに私が間違っている文字列の書式を設定していますが、私はのためにすることはできません私の人生はこれをどうやって正しく行うかを理解しています。

誰かが私を啓発できますか? :)

EDIT、私も変更しようとしましたrequest.ContentType = "application/x-www-form-urlencoded";からrequest.ContentType = "multipart/form-data";に変更しました。これは役に立たなかったが、私はそれをそのままにするつもりだ。

EDIT:フルコード:

public static string sendReq (string url, string pdata)//Pdata is the string containing form data 
{ 
    StringBuilder sb = new StringBuilder(); 
    byte[] buf = new byte[8192]; 
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); 
    CookieCollection jar = new CookieCollection(); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    jar.Add(new Cookie("Cookie","Data","Removed","For privacy.")); 
    l("Loading cookie jar onto request"); 
    CookieContainer cont = new CookieContainer(); 
    cont.Add(jar); 
    request.CookieContainer = cont; 
    if (pdata != "") 
    { 
     request.Method = "POST"; 
     request.ContentType = "multipart/form-data;"; 
     request.ContentLength = pdata.Length; 
     StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(pdata); 
     stOut.Close(); 
    } 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
    Stream resStream = response.GetResponseStream(); 
    string tempString = null; 
    int count = 0; 
    do 
    { 
     count = resStream.Read(buf, 0, buf.Length); 
     if (count != 0) 
     { 
      l("Data was read. ["+count+" bytes]. Encoding to ASCII"); 
      tempString = Encoding.ASCII.GetString(buf, 0, count); 
      l("Appending to full string"); 
      sb.Append(tempString); 
     } 
    } 
    while (count > 0); 
    return sb.ToString(); 
} 

ポストデータを送信処理するコードの一部:

if (pdata != "") 
    { 
     request.Method = "POST"; 
     request.ContentType = "multipart/form-data;"; 
     request.ContentLength = pdata.Length; 
     StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); 
     stOut.Write(pdata); 
     stOut.Close(); 
    } 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 
+0

私のためにフォーマットしてくれてありがとう、Codo:D忘れてしまった。助けてくれる –

+0

あなたのコードを教えてもらえますか?あなたは "Expect"ヘッダーを設定しましたか? – Codo

+0

確かに、私はそれを本当に素早く取ってもらいましょう......そして、私は "Expect"ヘッダーを設定しませんでした。おっと... –

答えて

2

試してみてください。もちろん

HttpWebRequestの追加されます期待値ヘッダーはデフォルトでは多くのサーバーを混乱させます。

更新

戻すには:

request.ContentType = "application/x-www-form-urlencoded"; 

コンテンツタイプとボディ内のデータの現在の組み合わせが一致しないため。

+0

お返事ありがとうございます。 :Dそれは私が得ていたエラーを取り除くのを助けた。どうもありがとうございました。 :) –

関連する問題