2017-12-28 54 views
1

HTTPクライアントを使用してWebサイトにフォームを送信しようとしています。ウェブサイトは、私の要求に基づいてデータを含むリストを返します。 プロセス自体はうまくいきますが、ブラウザで手作業で行うと3つの要求があれば十分です。httpclienthandlerで1つのパラメータを使用して複数の値をcで照会する

ブラウザには、データにフィルタを適用するための複数のチェックボックスがあります。 HTTP投稿フォームは、その中に以下のデータを有する:

enter image description here

私はその後FormUrlEncodedContentに変換するC#でdictonaryを作成することにより、同一のデータを得ることができた:と

values = new Dictionary<string, string> 
{ 
    { "statuses[]", "2048" }, 
    { "issued_from", "" }, 
    { "issued_till", "" }, 
    { "listing_from", "" }, 
    { "listing_till", "" }, 
}; 
var content = new FormUrlEncodedContent(values); 
content.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
var response = GlobalVar.client.PostAsync(URI, content).Result; 

私は3つの要求を作成し、後で取得したデータをマージする必要があります。これは明らかに、私のシステムリソースのコスト、サーバリソースのコスト、インターネットのバンド幅などの最もクリーンなソリューションではありません。

私は次のように見えたブラウザでリクエストのフォーマットされていないヘッダをチェックする:

Referer: https://www.example.com/en/example/?statuses[]=512&statuses[]=1024&statuses[]=2048&max_results=100&page=1 

これは私が辞書にステータスを3回追加される場合がありますという結論に私を導きました

values = new Dictionary<string, string> 
{ 
    { "statuses[]", "512" }, 
    { "statuses[]", "1024" }, 
    { "statuses[]", "2048" }, 
    { "issued_from", "" }, 
    { "issued_till", "" }, 
    { "listing_from", "" }, 
    { "listing_till", "" } 
}; 

辞書はデータベースのように動作し、同じキー値を複数回受け入れません。

誰かが1回のリクエストで3つのステータスをどのように投稿できるかについての解決策はありますか?

List<Tuple<string,string>>()? 

など何か違うものを使ってもいいですか?

答えて

0

配列よりも値の方がCSV文字列を送る方が良いでしょう。以下の配列を使用したい場合:

Dictionary<string, string[]> values = new Dictionary<string, string[]>{ 
       { "statuses", new string[] {"512","1024","2048" }}, 
       { "issued_from", null }, 
       { "issued_till", null }, 
       { "listing_from", null }, 
       { "listing_till", null } 
      }; 
関連する問題