C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

GET送信で指定したWebページを取得できません

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■84880 / inTopicNo.1)  GET送信で指定したWebページを取得できません
  
□投稿者/ すえぞう (1回)-(2017/08/16(Wed) 11:18:24)

分類:[C#] 

初投稿です。
開発環境はVisualStudio2017でC#で開発しています。
C#は初心者です。

あるサイトにログインし、指定した品番のWebページを取得するといったプログラムを組んでいます。
ログインまではうまくいきましたが、その後の指定したページがうまく取得できません。

WebClientメソッドを使用してURL(https://www.toarunet.jp/SearchItem?xxxx=品番&yyyy=0&zzzz=1
というような形式のURL)を送ってみたところ、品番のページが表示されてほしいのですが、
ログインしないで要求を出した時の画面が表示されてしまいます。

参考にしたサイトはWebClientクラスでGETメソッドによりクエリ文字列を送信するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/308wcquerystr/wcquerystr.html
に従い、URLを組み立てています。

WebClient wc = new WebClient();
            
            
// サーバにUTF-8でアクセスするためにUser-Agentを設定
wc.Headers.Add("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)");
NameValueCollection nvc = new NameValueCollection();//パラメータ定義
nvc.Add("xxxx","12345");//品番12345を要求
nvc.Add("yyyy", "0");
nvc.Add("zzzz", "1");

wc.QueryString = nvc;

byte[] result = wc.DownloadData("https://www.toarunet.jp/SearchItem");

string html = enc.GetString(result);
Console.WriteLine(html);

もしかしてURLがちゃんと生成されてないのでしょうか。
Console.WriteLineでURL表示させようとしたところbyteは入れられないというコンパイルエラーが出て
確認できていません。
URLが正常に生成されているか確認する方法を教えてください。


引用返信 編集キー/
■84881 / inTopicNo.2)  Re[1]: GET送信で指定したWebページを取得できません
□投稿者/ 魔界の仮面弁士 (1384回)-(2017/08/16(Wed) 11:33:10)
No84880 (すえぞう さん) に返信
> ログインしないで要求を出した時の画面が表示されてしまいます。

そのサイトの認証部分は、どのような作りになっているのでしょうか?

BASIC 認証なのかフォーム認証なのか分かりませんが、「ログイン」処理が
あるということは、認証成功を示すセッションチケットが何らかの形
(たとえば cookie 等)で渡されるようになっていて、次回以降は
それを付与した形でリクエストを投げる必要があるはずです。

http://dobon.net/vb/dotnet/internet/usecredentials.html
http://dobon.net/vb/dotnet/internet/usecookie.html


サイト側の実装が不明な場合は、Fiddler を用いるなどして、
ブラウザーからアクセスした場合の処理と、C# コードからのアクセス時とで
送受信されるデータがどのように異なっているのかを比較して見ると良いでしょう。
引用返信 編集キー/
■84883 / inTopicNo.3)  Re[2]: GET送信で指定したWebページを取得できません
□投稿者/ すえぞう (2回)-(2017/08/16(Wed) 14:57:23)
No84881 (魔界の仮面弁士 さん) に返信
> ■No84880 (すえぞう さん) に返信
>>ログインしないで要求を出した時の画面が表示されてしまいます。
>
> そのサイトの認証部分は、どのような作りになっているのでしょうか?

魔界の仮面弁士様へ
示していただいたurlを見たところcookie認証でした。
この場合、GET送信のたびに前回通信のcookieを取っておいて、
cookie情報を送信するという事でよろしいのでしょうか?

引用返信 編集キー/
■84884 / inTopicNo.4)  Re[3]: GET送信で指定したWebページを取得できません
□投稿者/ 魔界の仮面弁士 (1385回)-(2017/08/16(Wed) 15:04:59)
No84883 (すえぞう さん) に返信
> 示していただいたurlを見たところcookie認証でした。
> この場合、GET送信のたびに前回通信のcookieを取っておいて、
> cookie情報を送信するという事でよろしいのでしょうか?

認証された CookieContainer を次回の通信以降にも引き渡すようにします。
http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html
引用返信 編集キー/
■84887 / inTopicNo.5)  Re[4]: GET送信で指定したWebページを取得できません
□投稿者/ すえぞう (3回)-(2017/08/16(Wed) 16:25:53)
No84884 (魔界の仮面弁士 さん) に返信
> ■No84883 (すえぞう さん) に返信
>>示していただいたurlを見たところcookie認証でした。
>>この場合、GET送信のたびに前回通信のcookieを取っておいて、
>>cookie情報を送信するという事でよろしいのでしょうか?
>
> 認証された CookieContainer を次回の通信以降にも引き渡すようにします。
> http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html

魔界の仮面弁士さん
教えて頂いたURLを元に組みなおしたら、思うように動作するようになりました。
ありがとうございます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ