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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

WebKit

WebKitはAppleのSafariとAndroid, iOS, RIM Blackberry, SymbianとWebOSを含むインストール済みのモバイルブラウザの動力となっているオープンソースのウェブブラウザエンジンです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

2875閲覧

phantomjsでのアクセスについて

hogehoge123

総合スコア14

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

WebKit

WebKitはAppleのSafariとAndroid, iOS, RIM Blackberry, SymbianとWebOSを含むインストール済みのモバイルブラウザの動力となっているオープンソースのウェブブラウザエンジンです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2016/04/25 09:11

編集2016/04/27 02:26

現状と問題

現在、phantomjsを利用しており、プロキシ経由でスクレイピングや
レスポンスタイムの計測などを行いたいと考えております。

そこで、http://<フォワードプロキシIP>でアクセスを行い、
phantomjsのapi機能のcustomHeadersでヘッダを付与して、
プロキシ経由で、アクセスを行いました。

結果、http://<対象のFQDN>とhttp://<対象FQDN>/main.jsの2つのみ
プロキシ経由で、アクセスを行い、その他の対象FQDNのコンテンツは、
オリジンに直接とるような振る舞いをしていました。(tcpdumpの結果)

対象FQDNのすべてのコンテンツがプロキシを経由してアクセスをするためには、
どのように設定すればいいでしょうか。
(但し、hostsファイルを書き換えてしまうのはなしでお願いいたします。)

また、なぜこのようになっているのかもご教授していただけると幸いです。

<phantomjsのコード>

var fs = require('fs'), page = require('webpage').create(), system = require('system'), fqdn = system.args[1], proxyIp = "http://10.16.17.34"; arrdata = fqdn.split(/\r\n|\n|\r/); // 読み込んだurl.txtを配列へ格納 var urltmp, urlarr = []; while ((urltmp = arrdata.shift()) !== undefined) { if (urltmp !== "") urlarr.push(urltmp); } var a = 0; function createHAR(address, title, startTime, resources) { var entries = []; resources.forEach(function (resource) { var request = resource.request, startReply = resource.startReply, endReply = resource.endReply; if (!request || !startReply || !endReply) { return; } if (request.url.match(/(^data:image\/.*)/i)) { return; } entries.push({ startedDateTime: request.time.toISOString(), time: endReply.time - request.time, request: { method: request.method, url: request.url, httpVersion: "HTTP/1.1", cookies: [], headers: request.headers, queryString: [], headersSize: -1, bodySize: -1 }, response: { status: endReply.status, statusText: endReply.statusText, httpVersion: "HTTP/1.1", cookies: [], headers: endReply.headers, redirectURL: "", headersSize: -1, bodySize: startReply.bodySize, content: { size: startReply.bodySize, mimeType: endReply.contentType } }, cache: {}, timings: { blocked: 0, dns: -1, connect: -1, send: 0, wait: startReply.time - request.time, receive: endReply.time - startReply.time, ssl: -1 }, pageref: address }); }); return { log: { version: '1.2', creator: { name: "PhantomJS", version: phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch }, pages: [{ startedDateTime: startTime.toISOString(), id: address, title: title, pageTimings: { onLoad: page.endTime - page.startTime } }], entries: entries } }; } var page = require('webpage').create(), system = require('system'); // カスタムヘッダーの追加 page.customHeaders = { "Host" : urlarr[a].replace(/http\u003a\u002f\u002f|https\u003a\u002f\u002f/g, "") } if (system.args.length === 1) { console.log('Usage: netsniff.js <some URL>'); phantom.exit(1); } else { page.address = system.args[1]; page.resources = []; page.onLoadStarted = function () { page.startTime = new Date(); }; page.onResourceRequested = function (req) { page.resources[req.id] = { request: req, startReply: null, endReply: null }; }; page.onResourceReceived = function (res) { if (res.stage === 'start') { page.resources[res.id].startReply = res; } if (res.stage === 'end') { page.resources[res.id].endReply = res; } }; page.open(proxyIp, function (status) { var har; if (status !== 'success') { console.log('FAIL to load the address'); phantom.exit(1); } else { page.endTime = new Date(); page.title = page.evaluate(function () { return document.title; }); har = createHAR(proxyIp, page.title, page.startTime, page.resources); console.log(JSON.stringify(har, undefined, 4)); phantom.exit(); } }); }

<実行方法(cli)>

phantomjs test.js <対象のFQDN>

<tcpdumpのログ>

1461570272.645 1039 121.119.165.247 TCP_MISS/200 10284 GET http://<対象FQDN>/ - DIRECT/<対象FQDN> text/html
1461570274.328 545 121.119.165.247 TCP_MISS/555 0 GET http://<対象FQDN>/main.js - DIRECT/<対象FQDN> -

<プロキシについて>

Nginxでフォワードプロキシになっており、
フォワードプロキシを向け先にして、ホストヘッダをつければ、
プロキシしてくれる設定となっております。
(ここの設定は、他のことでも利用しているため関係ないと思われます。)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問