我尝试将以编程方式创建的HtmlForm
的值获取到外部站点。此网站要求将数据作为POST
发送,因为它可能包含合理的信息。
我从JSon-Response生成HtmlForm
,如下所示:
JObject jsonResponseActionData = (JObject)joResponse["action_data"];
var redirectURL = (JValue)jsonResponseActionData["url"];
HtmlForm form= new HtmlForm {
Method = "post",
Action = redirectURL.ToString()
};
var inputTypeString = "<input type=\"text\" name=\"inputName\" value=\"inputValue\">";
foreach (var obj in jsonResponseFields) {
if (obj.Value.ToString() == "") {
form.InnerHtml += inputTypeString.Replace("inputName", obj.Key).Replace("inputValue", "").Replace(">", " disabled >");
} else {
form.InnerHtml += inputTypeString.Replace("inputName", obj.Key).Replace("inputValue", obj.Value.ToString());
}
}
如果我这样写入HTML文件并向其添加提交按钮,我可以成功将其提交到外部网站,这样我就可以获取JSon-Response并从中正确提取所有信息
我尝试过:
Server.Transfer
and Response.Redirect
,但两者都抛出异常(分别为System.ArgumentException
和ThreadAbortException
),因为我想要访问外部网站如何将生成的表单提交到外部网站?请注意,此网站确实要求我提交表单,因此任何其他不涉及提交表单的解决方案都不具有建设性。
答案 0 :(得分:0)
我现在实施了一个解决方法,也许这对其他人有帮助(但也许这个答案被遗忘,因为它是如此糟糕的黑客?):
我在子文件夹中创建了一个新的HTML页面。此子文件夹受Web.config
和.htaccess
保护(因为我没有找到禁止在Web.config
中调用* .html文件的方法),这意味着文件无法从外部列出即使您知道文件名,也无法查看源文件和文件。
这个HTML页面只包含我要提交的表单和一些JavaScript,它会自动点击页面加载时的提交按钮:
<head>
<script>
function clickButton(){
document.getElementById("submitForm").click();
</script>
</head>
<body onload="clickButton()">
<!--Actual content goes here-->
</body>
然后我将用户重定向到该页面:
Response.Redirect(pageName);
完成JSON数据的处理后。
这将在我的情况下工作,因为无论如何用户被重定向到外部站点,在最好的情况下,他/她甚至不会注意到重定向到这个中间站点,即使它被注意到,页面也没有t包含用户不知道的任何内容,加上HTML文件中的数据不敏感,用户必须在外部网站上输入此数据,因此此处不存在安全漏洞。至少我现在无法想到。