2016-07-19 3 views
1

今日は私がコミュニティに向いているという非常に奇妙なエラーが発生しました。 phantomJSで呼び出されたAPIの期待されるJSON応答は返されませんでしたが、結果は失敗のステータスでした。ロード中のページに無効なコンテンツタイプのレスポンスヘッダーが含まれていると、PhantomJSの返信ステータスが失敗します

onResourceReceivedは、()のステータスはいつかのためにこれをデバッグした後

を失敗を示す)(onLoadFinished問題 内のリソースのために200 HTTPステータスコードを示し、私は、サイトが非標準のコンテンツタイプを返していましたことに気づきました応答のヘッダー。 content-type "application/json"ではなく、 "application/servicename-1.0 + json"が返されます。

これを確認するには、同様のヘッダーを提供するローカルWebサーバーをスピンアップし、十分なファンタムjがページを読み込めないことを確認します。応答ヘッダーを "application/json"に設定すると、phantomjsはページを正しくレンダリングし、pageオブジェクトのpage.plainText変数を設定します。私は以下のテストスクリプトを含んでいます。

誰もこのようなことが起こったことはありますか?

この問題をphantomjsで処理する方法についてのご意見はありますか?

答えて

1

PhantomJSのソースコードを編集してコンパイルするのではなく、私が考えることができる最も簡単で迅速な解決策は、間違ったヘッダーを書き換えるPhantomJSの前に単純なローカルプロキシサーバーを設定することです。

それは、この間に合わせのn-の例のように、Fiddler2を、チャールズ・プロキシまたは単純なNode.jsのスクリプトのようなものが考えられます。

// npm install proxy-tamper 
var proxy = require('proxy-tamper').start({port: 3000}); 

proxy.tamper(/api.truelocal.com.au.*$/, function (request) { 

    request.onResponse(function (response) { 

    if ('content-type' in response.headers && response.headers['content-type'] == 'application/servicename-1.0+json') { 
     response.headers['content-type'] = 'application/json'; 
    } 

    response.complete(); 
    }); 
}); 

はその後PhantomJSはそれを使用している:

phantomjs --proxy=127.0.0.1:3000 script.js 

これは安全なページでは機能しません。

+0

興味深いアイデアは、phantomJSソースに精通していないので、私も編集を行っています。その正面のアイデアは? – Jesse

1

この質問をした後、私はファントムズのソースで深いダイビングを行いました。アプリケーション/ jsonについてかなり厳密な検出があるようです:https://github.com/Vitallium/qtwebkit/blob/phantomjs/Source/WebCore/dom/DOMImplementation.cpp#L368

+0

あなたはそのチェックに 'application/servicename-1.0 + json'をオプションとして追加してビルドすればうまくいくでしょうか?ニース! – Vaviloff

+0

そうだと思いますか?掘り起こして実際にそれを構築する必要がありますが、私は期待しています.... – Jesse

関連する問題