2

サイトにログインする必要があるプログラムがあり、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...
4

1 に答える 1

0

RESTアプリケーションを扱っていますか??

はいの場合は、クエリ文字列ではなくリクエスト本文で投稿データを送信します。

スタックの投稿もご覧ください:特殊文字は REST Web サービス通信で問題を引き起こします

于 2013-09-02T05:12:49.227 に答える