Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。1,669件0初めまして、Swift3を学習中のものです。SwiftでのHTMLの取得方法について質問があります。Webサイトには、iPhoneなどで閲覧するモバイルサイトとパソコンでみる場合のPCサイトがサイト上で設定されていると思います。下記のコードをモバイルサイト、PCサイトが設定されている任意のURLで実行するとモバイルサイトがiPhone上で見れます。"任意のURL")!)webview.loadRequest(request)ここで、webviewでロードされているモバイルサイトのHTMLデータをString形式で取得したいと思い下記の関数を作成しました。myhtml}しかしながら、このgetHtmlData関数を実行すると、PCサイトのHTMLがStringで返されます。User-Agentを付与することで、モバイルサイトのHTMLデータをダウンロード出来るかと思い、setValueしたのですが、うまくいきません。どなたか、モバイルサイトのHTMLデータを取得する方法を教えてください。webview.loadRequestでは、なぜ何もしなくても(この短いコードで)モバイルサイトが表示されるのかも教えていただけると有り難いです。票0まずはこの部分です:Webサイトには、iPhoneなどで閲覧するモバイルサイトとパソコンでみる場合のPCサイトがサイト上で設定されていると思います。各Webサイトが、リクエストをモバイルサイトと判定するかPCサイトと判定するかの詳細は、サイトによってバラバラです。あなたのターゲットとするサイトによっては、以下の内容は当てはまらないかもしれません。できればターゲットとするサイトの例を挙げていただいた方がいいでしょう。.utf8)で、requestの中の他の要素(User-Agentも含めて)は全て無視してurlだけを取り出しています。従ってWebサイトにはUser-Agentの指定などない(ほぼ空の)GETリクエストが送られます。あなたの試されたサイトでは、そのようなリクエストに対してPC用の応答を返すのでしょう。Swift3以降では特別な理由のない限りNSMutableURLRequestは使わずURLRequestを使うべきです。UIWebViewと言うのはブラウザアプリに匹敵する機能を持った「重い」viewです。User-Agentを取り出すためにだけ、毎回そのインスタンスを作成するなんてとんでもないことはやめましょう。パラメータのないイニシャライザUIWebView()の動作は未定義ですから、何が起こるのかわからないと言うコードになっています。(現在のiOSでは期待通りに動いているかもしれませんが、次のバージョンではアプリがクラッシュするかもしれません。)そもそもString.init(contentsOf:encoding:)には(Stringの他のイニシャライザにも)、「requestの中の他の要素」を一緒に送信してくれるような機能はありませんし、このメソッドを(外部URLに対して)メインスレッド内で呼んではいけません。GET以外のHTTPメソッドでリクエストを送りたい場合User-Agentなど、特定のHTTPヘッダ情報をセットしたい場合メインスレッドの中から呼び出したい場合などには、String.init(contentsOf:encoding:)やらData.init(contentsOf:options:)とかは使えず、必ずURLSessionなどを使わないといけないと思ってください。上記のようなことを踏まえて、あなたのコードをざっくり書き換えるとこんな風になります。task.resume()}呼び出す方はこんな感じになります。}最初に書いたように、あなたのターゲットとするサイトでどうなるかはわかりませんが、こちらでいくつかのサイトで試した範囲ではこのコードでモバイル版のHTMLを取得できるのを確認しています。最後にこの部分:webview.loadRequestでは、なぜ何もしなくても(この短いコードで)モバイルサイトが表示されるのか先の*2に書いたように、UIWebViewやWKWebViewはブラウザそのものと言っても良い機能を備えています。従ってURLさえ渡してやれば、モバイル版ブラウザとしてUser-Agentの他諸々のHTTPヘッダーを仕込んだリクエストをサーバ側に送信します。Webサイト側はモバイル版ブラウザと同じ応答を返すことになるわけです。ちなみに、Webサーバからの応答を受信したWebViewは、その内容をDOMとして解析し、それを画面に描画できるようCSSも取得・解析し、JavaScriptのコードが含まれていれば実行し、imgタグが含まれていれば、その内容を取得するためのリクエストを送信する、なんてことまでブラウザと同様に行います。従って、それらの動作が不要なのであれば、「短いコードで」実現できると言う理由でWebViewを使用するべきではありません。個の銅バッジ丁寧なご回答ありがとうございます。ご回答頂いたコードでしっかりとモバイルサイトのデータを取得することができました。UIWebViewの使用や、Swift3の細かい言語使用を教えて頂き、本当にありがとうございます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。UIWebViewでYoutubeを埋め込み再生する際にDNSサーバーを変更0SwiftのWebViewにサイトが表示されない1WKWebViewのUser-Agent偽装方法について0Swift4でのURLSessionTaskを用いたAPIからのデータ取得について。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。