C# WPF(.NET Framework 4.7.2)を使って、HttpClientクラスの学習のために、HTTPリクエストし、テキストを取得するプログラムを作成したいと考えています。
作成したプログラムが、POST送信、GET送信した内容を確認する方法が知りたいです。
合わせて、プログラムの修正方法も教えていただけたらと思います。
現時点では、以下のようなプログラムです。実行して得られたテキストの内容から考えて、うまく、送信されていないように思えます。どんな内容が送信されているかわからないので、どこを直したら良いのかも判断できません。
「https://www.bing.com/search?q=C%23+HttpClient+post」を送信し、送り返されたテキストをテキストボックスに表示するプログラムを意図しています。
アプリケーションは、新しいプロジェクトの作成から、WPFアプリ(.NET Framework)・テンプレートを使って作成しています。
実行後、右上「Browse」ボタンを押すと、送り返されたテキストがテキストボックスに格納されます。
クッキーを有効にする、ユーザーエージェントを送信する、ロケールを送信する操作を加える操作では、結果は変化しませんでした。
xaml
1<Window x:Class="PostRequest.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 5 Title="GetHtmlDocument" Height="250" Width="350"> 6 <DockPanel> 7 <DockPanel DockPanel.Dock="Top"> 8 <Button DockPanel.Dock="Right" Click="Button_Click">Browse</Button> 9 <TextBox Name="queryBox">httpclient c# post</TextBox> 10 </DockPanel> 11 <TextBox Name="htmlDocument">TextBox</TextBox> 12 13 </DockPanel> 14</Window> 15
xaml.cs
1using System.Collections.Generic; 2using System.Net.Http; 3using System.Windows; 4 5namespace PostRequest 6{ 7 /// <summary> 8 /// MainWindow.xaml の相互作用ロジック 9 /// </summary> 10 public partial class MainWindow : Window 11 { 12 public MainWindow() 13 { 14 InitializeComponent(); 15 } 16 17 private static HttpClient client = new HttpClient(); 18 19 private async void Button_Click(object sender, RoutedEventArgs e) 20 { 21 // クッキーを有効にする 22 var handler = new HttpClientHandler() 23 { 24 UseCookies = true, 25 }; 26 // 送信するクエリを作成する 27 var parameters = new Dictionary<string, string>() 28 { 29 { "p", queryBox.Text }, 30 }; 31 // ユーザーエージェントを設定する 32 client.DefaultRequestHeaders.Add("User-Agent", 33 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) like Gecko"); 34 // ロケールを設定する 35 client.DefaultRequestHeaders.Add("Accept-Language", "ja-JP"); 36 // クエリをpostして、結果をテキストボックスに格納する 37 var response = await client.GetAsync($"https://www.bing.com/search?{await new FormUrlEncodedContent(parameters).ReadAsStringAsync()}"); 38 39 htmlDocument.Text = response.ToString(); 40 } 41 } 42} 43
Text
1StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 2{ 3 Transfer-Encoding: chunked 4 Cache-Control: private 5 P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND" 6 Set-Cookie: _EDGE_S=F=1&SID=22E72F78109065D20A053F5F1162646E&mkt=ja-jp; domain=.bing.com; path=/; HttpOnly 7 Set-Cookie: ULC=; domain=.bing.com; expires=Tue, 27-Apr-2021 07:02:49 GMT; path=/ 8 Set-Cookie: _HPVN=CS=eyJQbiI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiUCJ9LCJTYyI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiSCJ9LCJReiI6eyJDbiI6MSwiU3QiOjAsIlFzIjowLCJQcm9kIjoiVCJ9LCJBcCI6dHJ1ZSwiTXV0ZSI6dHJ1ZSwiTGFkIjoiMjAyMS0wNC0yOFQwMDowMDowMFoiLCJJb3RkIjowLCJEZnQiOm51bGwsIk12cyI6MCwiRmx0IjowLCJJbXAiOjF9; domain=.bing.com; expires=Fri, 28-Apr-2023 07:02:49 GMT; path=/ 9 X-SNR-Routing: 1 10 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload 11 X-MSEdge-Ref: Ref A: 456BEE6A10964225A98D76972007BF85 Ref B: TYBEDGE0616 Ref C: 2021-04-28T07:02:48Z 12 Date: Wed, 28 Apr 2021 07:02:48 GMT 13 Content-Type: text/html; charset=utf-8 14} 15
回答2件
あなたの回答
tips
プレビュー