質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

5787閲覧

xamarin C# HttpWebRequestにてUserAgentを設定する方法

kanimaru

総合スコア1013

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/05/09 01:23

編集2017/05/09 01:25

題目の通り、UserAgentの設定方法が分かりません。

C#のHttpWebRequestにてHTTPスクレイピングを行おうとしていますが、UserAgentの設定が出来なくて困っています。

検索するとHttpWebRequestのプロパティUserAgentに値を設定すると書いてありますが、xamarinから見たHttpWebRequest定義が以下のようになっており、定義がありません(各プロパティメソッドのコメントは文字制限上省略してあります)。

#region アセンブリ System.Net.Requests, Version=4.0.0.0, Culture=neutral, // Microsoft\Framework\.NETPortable\v4.6\Profile\Profile44\System.Net.Requests.dll #endregion using System.IO; namespace System.Net { public class HttpWebRequest : WebRequest { public int ContinueTimeout { get; set; } public override Uri RequestUri { get; } public override string Method { get; set; } public override WebHeaderCollection Headers { get; set; } public override ICredentials Credentials { get; set; } public virtual CookieContainer CookieContainer { get; set; } public virtual bool SupportsCookieContainer { get; } public override bool UseDefaultCredentials { get; set; } public virtual bool AllowReadStreamBuffering { get; set; } public string Accept { get; set; } public override string ContentType { get; set; } public override void Abort(); public override IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state); public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state); public override Stream EndGetRequestStream(IAsyncResult asyncResult); public override WebResponse EndGetResponse(IAsyncResult asyncResult); } }

また、同クラスのHeadersにて以下のように設定しようとしました。しかし、

System.ArgumentException: The 'User-Agent' header must be modified using the appropriate property or method.

というように、メソッドがプロパティで指定しろと怒られる始末です・・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Xamarin では、ネイティブ側の HTTP アクセス機能を使ったリクエストが使える HttpClient クラスを用いるべきです。パフォーマンスも高く、iOS での ATS 対応などでもアドバンテージがあります。HttpClient Stack and SSL/TLS Implementation Selector for iOS/macOS あたりも参考にしてください。

HttpClient に変更する

HttpClient クラスを使う場合は、以下のように DefaultRequestHeaders にセットできます。

cs

1var client = new HttpClient(); 2client.DefaultRequestHeaders.Add("User-Agent", UserAgent);

どうしても HttpWebRequest クラスでなければならない

PCL ではなくプラットフォーム側 (Xamarin.iOS,Android) には UserAgent プロパティがあります。HttpWebRequest を生成して UserAgent を作って返す DependencyService などを用意して、そこから取得する形にすれば良いと思います。

投稿2017/05/09 02:18

iseebi

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanimaru

2017/05/09 02:36

iseebiさん  ありがとうございます! xamarinのサイトをフラフラみていたら、HttpWebRequestがみつかったものでその部分ばかりみていました。改めてHttpClientで構築してみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問