使用用户数据登录网站后,我试图获取html源,但没有提供html源。那么源代码中的问题出在哪里呢?在网站上,登录“ lobby.ogame.gameforge.com/?language=tr”后,它将我重定向到服务器选择页面;我正在尝试获取此页面的html源。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string URI = "https://tr.ogame.gameforge.com/";
string myParameters = "login=testusername&pass=testpassword";
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
richTextBox1.Text = HtmlResult;
}
}
}
答案 0 :(得分:0)
您的主要问题是,您将需要运行javascript来获取数据,而不能仅使用DownloadString
等来执行此操作-也就是说,您需要模仿Web浏览器。我建议您获得一个gecko之类的浏览器组件,然后看看如何将数据发布到here中。然后,一旦下载列表并正确填写列表,就可以访问当前的html文档。
答案 1 :(得分:0)
我查看了该网站及其登录系统的工作方式,并且您对不正确的工作方式做出了两个假设。您登录该特定网站的方式是向“ https://lobby-api.ogame.gameforge.com/users”发送请求,并以“ application / x-www-form-urlencoded”格式提供数据。所需数据如下表所示:
关键█值
凭证[电子邮件]█此处的电子邮件
凭证[密码]█这里的密码
发送此请求后,您将收到一个名为“ PHPSESSID”的cookie。您可以使用该cookie进行后续请求,例如,发送至“ https://lobby.ogame.gameforge.com/?language=tr”,这是您尝试访问的页面到“ index.php”
但是,一旦加载此页面并呈现HTML,您将发现它不包含任何有趣的东西,例如服务器,这可能就是您想要的。 这是HTML:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="shortcut icon" href="/favicon.ico">
<script type="text/javascript" src="/config/configuration.js"></script>
<title>OGame Lobby</title>
<link href="https://s3-static.geo.gfsrv.net/browsergamelobby/ogame/1.0.8/css/main.2e4c281d.css" rel="stylesheet">
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<div class="planet"></div>
<script type="text/javascript" src="https://s3-static.geo.gfsrv.net/browsergamelobby/ogame/1.0.8/js/main.edde2ed8.js"></script>
</body>
</html>
然后将javascript加载到页面上。这有两个选择,您可以使用AndriusNaruševičius建议的浏览器组件,也可以使用javascript使用的API。为了弄清楚API,您可以在浏览器的开发工具中使用“网络”标签。这种方法最初可能会更复杂,但最终,它应该更容易并且可以编写更清晰的代码,因为API旨在供人们(创建它的人)使用,而HTML并非旨在被解析,因为专为浏览器而不是人类开发。但是,根据您打算对服务器列表进行的操作,实际上使用Andrius的方法可能会更容易,因此,您必须自己做出决定。
您可以了解chrome开发工具网络标签here并通过使用google来了解。您可以使用Postman之类的软件测试API调用。 如果您对Web请求/ API,Cookie和会话ID一无所知,则不应从此处开始,而应首先了解它们。要了解这一点,只需在Google上查找它们即可。