使用在线工具生成随机名称

时间:2015-12-03 00:47:33

标签: javascript php node.js

我找到了这个网站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并检查代码时,我发现了这一小段......

enter image description here

所以这就是我用来制定对php的请求。但是,我只是通过反复试验猜测需要发送的数据是键值对象,其中键是realname。我的问题是,我怎么会知道这个呢?有没有办法从网站上找到从POST发送数据的地方?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

在没有适当补偿的情况下窃取带宽(所谓的网络抓取)通常是不受欢迎的。虽然我没有彻底搜索,但我在该网站上找不到允许的任何内容。

你为什么不自己动手?它的非常简单,如本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;
}

形容词和名词的列表很短,你可以添加它们,正如评论所暗示的那样。