【问题标题】:gibberish instead of html response as body in node.request胡言乱语而不是html响应作为node.request中的主体
【发布时间】:2017-12-04 22:47:32
【问题描述】:

我正在使用 npm 中的请求模块向受密码保护的站点发出 HTTP 请求,输入密码,存储 cookie,然后在存储并验证 cookie 后发出请求。我能够获得与普通浏览器请求相同的标头,但是主体本身,而不是我在浏览器中获得的 HTML 文档,看起来像这样:

� �Z�r�H��c��䞙��pT���Ī$3�ƾ�~Y�@�MK8���>*��?�z)�?U��� ����J�혳��섯tB��x��c��?����������0�H�����V��O'�7����}。 ��L�"˖}/ta�xn�g#����O�����

任何想法可能导致此问题或如何解决?

此外,当我从命令提示符运行此程序时,计算机“叮当”

这是我正在运行的完整 node.js 代码(减去 URL/密码/等)

var parsedurl1 = url.parse( urlstring1 );
var options1 = {
  hostname: parsedurl1.hostname,
  port: ( parsedurl1.port || 80 ), // 80 by default
  method: 'POST',
  path: parsedurl1.path,
  headers: { 
      'Host': hostname
      ,'User-Agent': myuseragent
      ,'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
      ,'Accept-Language':"en-US,en;q=0.5"
      ,'Accept-Encoding': "gzip, deflate"
      ,'Referer': hostname
      ,'Content-Type': "text/html; charset=utf-8"
      ,'Content-Length': Buffer.byteLength(postData)
      ,'Connection': "keep-alive"
      ,'Upgrade-Insecure-Requests': "1"},
};
var cookiefile ; 
var postData=querystring.stringify({
        'email': myemail
        ,'password':mypassword
        ,'action': 'login'
        ,'go.x': 0
        ,'go.y': 0
    })
var cookiefile;
var callback =  function ( response ) {
    // display returned cookies in header
    var setcookie = response.headers["set-cookie"];
    if ( setcookie ) {
      setcookie.forEach(
        function ( cookiestr ) {
             cookiefile = cookiestr;
             fs.writeFile(cookiefilelocation, cookiestr);
          console.log(  "COOKIE:" + cookiestr );
        }
      );
    }    
    var data = "";
    response.on(
      "data",
      function ( chunk ) { data += chunk; }
    );

    response.on(
      "end",
      function () {  
            newcookiefile =  cookiefile.substr(0, cookiefile.indexOf(";"));
            var parsedurl2 = url.parse( urlstring2 );
            var options2 = {
                url: urlstring2,
                // port: ( parsedurl2.port || 80 ), // 80 by default
                method: 'GET',
                // path: parsedurl2.path,
                headers: { 
                "Host": hostname
                ,"User-Agent": myuseragent
                ,'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                ,'Accept-Language':"en-US,en;q=0.5"
                ,'Accept-Encoding': "gzip, deflate"
                ,'Referer':hostname
                ,'Cookie': newcookiefile
                ,'Connection': "keep-alive"
                ,'Upgrade-Insecure-Requests': "1"},
            };

            function callback3(error, response, body){
                console.log('error:', error); // Print the error if one occurred 

                console.log('statusCode:', response.headers ); // Print the response status code if a response was received 
                console.log('body:', body.substr(1,1000));
                fs.writeFile('./config/pullfiles/mostrecent.txt', body);
                }
            requestlib(options2, callback3);
      }
    );
  };
var request = http.request(options1, callback);


request.on(
  "error",
  function( err ) {
    console.error( "RERROR:" + err );
  }
);
request.write(postData);
request.end(); // let request know it is finished sending

【问题讨论】:

  • 您的计算机因包含0x07 的字节而响起,这是“铃”字符代码。 (与电传打字时代相关得多。)无论如何,根本没有代码,没有要检查的数据包捕获,甚至没有一个 URL 来尝试我们自己,这不可能帮助你。您正在查看来自某物的一堆二进制数据。
  • 好的,我现在正在更新更多信息 - 抱歉之前还不够
  • @Brad 我已经添加了我的完整代码 - 如果这仍然不符合标准,请告诉我,我将关闭并重写问题。谢谢
  • 这不是要编写标准,而是要提供相关信息,以便人们可以真正帮助您...
  • 好的,谢谢。我已经添加了代码。我不知道如何给一个数据包捕获。

标签: node.js http curl


【解决方案1】:

我想通了!这种乱码是由于我缺少“gzip:true”选项是我的请求()。现在第二个请求是:

url: urlstring2
    ,gzip: true
    ,headers:{...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2012-09-11
    • 2018-12-21
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多