如何以编程方式将代码从代码提交到外部网站
问题描述:
我试图获取以编程方式创建的HtmlForm
到外部网站的值。本网站要求将数据作为POST
发送,因为它可能包含合理的信息。如何以编程方式将代码从代码提交到外部网站
我生成的JSON响应这样的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并正确提取所有信息。
我曾尝试:
- 添加一个隐藏的表单元素的apsx页,但this isn't possible and results in an empty stack error
-
submitting it with
Server.Transfer
andResponse.Redirect
,但都抛出异常(System.ArgumentException
和ThreadAbortException
,分别),因为我想达到外部网站
如何将生成的表单提交给外部网站?请注意,本网站确实要求我提交表格,因此任何其他不涉及提交表格的解决方案都不具有建设性。
答
现在我实现了一个解决办法,这也许是帮助他人(但也许这个答案是downvoted被遗忘,因为它是这样一个可怕的黑客):
我在子文件夹中创建一个新的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数据就完成了。
这对我而言很有效,因为无论如何,用户都会被重定向到外部网站,在最好的情况下,他/他甚至不会注意到重定向到这个中间网站,即使发现该网页也不会不包含用户不知道的任何内容,再加上HTML文件中的数据不敏感,这些数据必须由用户在外部网站上输入,因此这里没有可能的安全漏洞。至少我现在无法想到。