【问题标题】:Using an online tool to generate a random name使用在线工具生成随机名称
【发布时间】:2015-12-03 00:47:32
【问题描述】:

我找到了这个网站http://www.mess.be/inickgenwuname.php

它允许你输入一个名字,它会生成一个随机的说唱歌手名字。我想在我的网站上有一个按钮来为您生成名称,所以我决定编写一些 javascript 来向该网站发送请求并解析响应以获取随机名称。

这是我编写的 node.js 代码。

function getRandomName() {
    var http = require('http');
    var data = {
   realname:"something"
};
var querystring = require("querystring");
var qs = querystring.stringify(data);
var qslength = qs.length;
var options = {
    hostname: "www.mess.be",
    path: "/inickgenwuname.php",
    method: 'POST',
    headers:{
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': qslength
    }
};

var str = "";
var req = http.request(options, function(res) {
    res.on('data', function (chunk) {
       str+=chunk;
    });
    res.on('end', function() {
        var s = str.slice(str.indexOf("From this day forward, I will be known as... ") + "From this day forward, I will be known as... ".length,
            str.indexOf("-And you"));
        s = s.replace("\n", "").trim();
        console.log(s);
    });
});

req.write(qs);
req.end();
}

当我去网站并在chrome上按f12并检查代码时,我发现了这个小片段......

所以这就是我用来制定对 php.ini 的请求的内容。但是,我只是通过反复试验猜测需要发送的数据是键值对对象,其中键为realname。我的问题是,否则我怎么会知道这一点?有没有办法从网站上查到,通过 POST 发送的数据是从哪里接收的?

【问题讨论】:

  • 您可能只需运行 cgi 十几次或两次即可获得形容词和名词,然后自己掷骰子,无需任何网络使用...

标签: javascript php node.js


【解决方案1】:

为什么要靠猜测?该表格会告诉您需要发送的所有内容。

您也可以按 F12 -> Network,然后发送请求。在此之后,您查看发送的请求并搜索 POST 请求。当您单击/inickgenwuname.php 请求时,您将获得有关它的更多信息。在那里您可以看到响应标头/请求标头以及最后一个类别“表单数据”。在那里您可以看到使用此表单发送的所有数据。

我希望这是您正在寻找的答案。

【讨论】:

    【解决方案2】:

    在没有适当补偿的情况下窃取带宽(所谓的网络抓取)是很常见的。尽管我没有彻底搜索,但我在那个网站上找不到任何允许它的东西。

    你为什么不自己推出呢?这非常很简单,可以在这个 Q&D hack 中看到:

    function wu_names(input){
      // some nice, fitting adjectives. Add more
      var adjectives = ["annoying", "crazy", "expert", "insane", "lucky", "sardonic", "pestering"];
      // some nice, fitting nouns. Add more
      var nouns = ["assassin", "bastard", "conjurer", "destroyer", "ninja", "prophet", "wizard"];
      var first = "";
      var second = "";
      var hash = 0;
      var primitive_hash = function(s){
        var h = 0;
        for(var i = 0;i < s.length;i++){
          var c = s.charCodeAt(i);
          // standard hash = hash * 31 + c
          h = ((h << 5) - h>>>0) + c;
        }
        return h;
      };
    
      first = input.split(" ")[0];
      // no useful entry at all
      if(first === undefined){
        return null;
      }
      hash = primitive_hash(first);
      first = adjectives[hash % adjectives.length];
      second = input.split(" ")[1];
      // no second entry
      if(second === undefined){
        return null;
      }
      hash = primitive_hash(second);
      second = nouns[hash % nouns.length];
    
      return first + " " + second;
    }
    

    形容词和名词的列表很短,您可以按照 cmets 的建议添加它们。

    【讨论】:

    • 我没有想到我正在做的事情是不对的。我是前端开发的新手。我想我会自己做一个,尽管我的说唱歌手名字可能不那么好
    • 嗯,CPU 很便宜,几 TB 容量的硬盘只需花很少的钱就能买到,但相比之下,带宽仍然相对昂贵。正如我所说:我没有检查整个网站,他们可能允许这样做。顺便说一句:原版似乎很老了,在这里找到了一个 2000 年的例子:groups.google.com/forum/?_escaped_fragment_=topic/…
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多