我找到了这个网站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的请求。但是,我只是通过反复试验猜测需要发送的数据是键值对象,其中键是realname
。我的问题是,我怎么会知道这个呢?有没有办法从网站上找到从POST发送数据的地方?
答案 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;
}
形容词和名词的列表很短,你可以添加它们,正如评论所暗示的那样。