サイトにログインする必要があるプログラムがあり、POST 要求を使用し、値の 1 つに特殊文字 (たとえば「%」) が含まれるまで、すべてうまくいきます。
captcha = "ABCDE" //all goes fine and well, server accept captcha
captcha = "ABC&%" //server dont accept captcha and return fail
//here is the bad part:
string request = "password=" + HttpUtility.UrlEncode(encpass, Encoding.UTF8) +
"&username=" + login + "&captcha_text=" + HttpUtility.UrlEncode(captcha, Encoding.UTF8);
また、私はもちろんそれをググって、見つけたものをすべてチェックしました。エンコーディングについてサーバーに「警告」する必要があるので、追加しました
request.Headers.TryAddWithoutValidation("Content-Type", @"application/x-www-form-urlencoded; charset=UTF-8");
しかし、それはまだ私を助けませんでした。
コンテンツの種類とリクエストの方法は、Firebug から取得したように見えるはずです。そのため、回答が見つかった場合は指摘してください。
modify0:また、プログラムがサーバーに送信したものを (Firebug を使用して) ブラウザーの要求と比較したところ、要求は完全に同じでした。唯一の違い - 私のリクエストは、特殊文字を含む値では受け入れられません。
modify1:また、ブラウザでチェックすると、サーバーは特殊文字の処理に問題はありません。たとえば、それ(ブラウザ)は「K&YF82」を「captcha_text=K%26YF82」(アドレスプロパティとリクエストボディで同じ値)として送信し、すべて正常に機能しました。UrlEncode は同じ置換を行いますが、私のプログラムではサーバーに受け入れられません。
解決:
{ password:"df464dsj", username:"username", captchaText:"ABC&%", remember_login:"false" }
代わりに
password=f2341f14f&username=username&captha...