、C#のエスケーププラス記号(+)HttpWebRequestの私が使用している
string postData = String.Format("username={0}&password={1}", "anyname", "+13Gt2");
のHttpWebRequestとウェブブラウザ結果を見ると、私はにログインしようとすると、HttpWebRequestを使って私のC#WinFormsからウェブサイトにデータをPOSTすると、パスワードが間違っていると伝えられます。 (ソースコード[richTexbox1]とwebBrowser1にあります)。私の別のアカウントでそれをしようとすると、それは「+」文字が含まれていない、それは私が正しく(バイトの配列を使用して、ストリームに書き込む)私はHttpUtility.UrlEncode()
があることが判明し、このQuestionから
byte[] byteArray = Encoding.ASCII.GetBytes(postData); //get the data
request.Method = "POST";
request.Accept = "text/html";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream newStream = request.GetRequestStream(); //open connection
newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
newStream.Close(); //this works well if user does not includes symbols
にログインすることができます無効な文字をエスケープするための解決策は、私はそれを正しく使用する方法を見つけることができません、私の質問は、urlEncode()
で私のPOSTデータをURLエンコードした後に私のデータをに正しく送信する方法はありますか?
これは私がそれを動作させる時間にわたってしようとしてきた方法ですが、運、
まず方法
string urlEncoded = HttpUtility.UrlEncode(postData, ASCIIEncoding.ASCII);
//request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = urlEncoded.Length;
StreamWriter wr = new StreamWriter(request.GetRequestStream(),ASCIIEncoding.ASCII);
wr.Write(urlEncoded); //server returns for wrong password.
wr.Close();
第二の方法
byte[] urlEncodedArray = HttpUtility.UrlEncodeToBytes(postData,ASCIIEncoding.ASCII);
Stream newStream = request.GetRequestStream(); //open connection
newStream.Write(urlEncodedArray, 0, urlEncodedArray.Length); // Send the data.
newStream.Close(); //The server tells me the same thing..
は私が考えていません私は間違って、URLエンコードされた要求に送信する必要があります、私は本当にいくつかの助けをお願いします、私はGoogleとcoulエンコードされたURLをHttpWebRequestに送信する方法について詳しくは知りません。あなたの時間と注意を感謝します。あなたが私を助けてくれることを願っています。ありがとうございました。
投稿データをエンコードする必要はありません。実際、このようなポストデータをエンコードすると、ブラウザはそれを誤って解釈します。あなたはおそらくあなたのエンコーディングに問題があります。あなたのコンテンツタイプにISO-8859-1を追加して何が起こるかを確認してください。 – Polity
@Polityまず、私に明白にしていただきありがとうございます。私はurlEncodeを使用して特殊文字をエスケープする方法を見つけることができませんでした。 (charset = ISO-8859-1)と同じ結果が残っていますが、何も変更されていません。エンコードされていると思いますが、 '+'はスペースに変換されます。 – WhySoSerious