【问题标题】:phantomjs output weird charactersphantomjs输出奇怪的字符
【发布时间】:2014-11-02 03:33:43
【问题描述】:

我已经在 Xampp 上安装了 prerender.io,我没有做任何花哨的事情。刚刚安装了 prerender 所需的一切,并按照 prerender.iohttps://github.com/zf-fr/zfr-prerender 上的文档进行操作。 所以可以说我在这里放了预渲染:

/public/assets/services/prerender

我在控制台中运行:

npm install
node server.js

Zfr-prerender 是中间件,我只改变了一个东西,引用 prerender 的 url:

'prerender_url' => 'http://localhost:3000/public/assets/services/prerender',

在我的浏览器中,我转到:

本地主机/商店/api/list?_escaped_fragment_=

当找不到路由时,来自 angularJS 的路由器重定向到 /list/1:

ListerApp.config(['$routeProvider', '$httpProvider', '$locationProvider', function($routeProvider, $httpProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
$routeProvider
    .when('/list/:page?',
        {
            templateUrl : '/assets/services/partials/list.html',
            controller : 'ListerCtrl',
            reloadOnSearch : false,
            js : ['/assets/min/shoplist_js.min.js', '/assets/min/bootstrap-typeahead.min.js'],
            //css : [],
            resolve : {
                sharedServiceAppData: function($sharedData){
                    // sharedFactoryAppData will also be injectable in your controller, if you don't want this you could create a new promise with the $q service
                    return $sharedData.promise();
                    //return;
                }
            }
        }
    )
    .otherwise({ redirectTo: '/list/1' });

}]);

控制台告诉我这个:

getting public/assets/services/prerender/http://localhost/shop/api/list
got 200 in 419ms for public/assets/services/prerender/http://localhost/shop/api/list

但所有 phantomJS 返回的都是奇怪的字符。

public function prerenderPost(PrerenderEvent $event)
{
    // This is the response we get from the Prerender service
    $response = $event->getResponse();
    var_dump($response->getHeaders());
    var_dump($response->getContent());
    // You could get the body and put it in cache
    // ...

}

这些是标头,var_dump($response->getHeaders()):

 array (size=5)
  0 => 
    array (size=2)
      'name' => string 'Content-Type' (length=12)
      'line' => string 'Content-Type: text/html;charset=UTF-8' (length=37)
  1 => 
    array (size=2)
      'name' => string 'Content-Encoding' (length=16)
      'line' => string 'Content-Encoding: gzip' (length=22)
  2 => 
    array (size=2)
      'name' => string 'Content-Length' (length=14)
      'line' => string 'Content-Length: 45' (length=18)
  3 => 
    array (size=2)
      'name' => string 'Date' (length=4)
      'line' => string 'Date: Thu, 30 Oct 2014 18:23:39 GMT' (length=35)
  4 => 
    array (size=2)
      'name' => string 'Connection' (length=10)
      'line' => string 'Connection: close'

这是一个 PHP var_dump($response->getContent()):

字符串 '‹������³É(Éͱ³ÉHML±³Ñ‡PIù)•@”+�� 'H'���' (length=45)

‹³É(Éͱ³ÉHML±³Ñ‡PIù)•@"+ 'H'

【问题讨论】:

  • 这应该是一个详细的错误报告在这里github.com/zf-fr/zfr-prerender/issues 或这里github.com/prerender/prerender/issues
  • 是的,有关您为获取这些字符所做的操作(以及您访问的 URL)的更多信息会有所帮助。谢谢!
  • 谢谢,我会编辑这个问题,以便获得更多信息。我会将其发布在 github 问题上。我们(或我)稍后可以参考 github 讨论,以便人们可以在此处找到有关此问题的更多信息。

标签: angularjs phantomjs prerender


【解决方案1】:

首先,解压并获取你需要的内容

$response->getBody()

其次,增加 de Zfr-prenderer 模块中的套接字超时可能会很有用,以防您的计算机非常旧且速度慢。

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 2018-07-22
    • 2018-10-29
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2014-03-21
    相关资源
    最近更新 更多