是否可以在服务器端执行 POST 到外部 HTTPS url 并将用户重定向到 POST 目标?
Posted
技术标签:
【中文标题】是否可以在服务器端执行 POST 到外部 HTTPS url 并将用户重定向到 POST 目标?【英文标题】:Is it possible to perform POST to external HTTPS url on server side and redirect user to the POST destination? 【发布时间】:2016-01-21 06:21:45 【问题描述】:所以我可以做到以下POST
提交
@html.BeginForm(null, null, FormMethod.Post, new @action = "https://externalsite.com/secretroom" )
<input id="SECRETCODE" name="SECRETCODE" type="hidden" value="GABEN" />
<input type="submit" value="submit"/>
提交后,它会带我到https://externalsite.com/secretroom
。但正如您所见,SECRETCODE
正在用户 HTML 页面中公开,我不希望这样。
所以我要做的是尝试在我的服务器端进行 POST。
public ActionResult Test()
using (var client = new HttpClient())
client.BaseAddress = new Uri("https://externalsite.com/secretroom");
var content = new FormUrlEncodedContent(new[]
new KeyValuePair<string, string>("SECRETCODE", "GABEN")
);
var result = await client.PostAsync("", content).Result;
if(result.IsSuccessStatusCode)
return Redirect("https://externalsite.com/secretroom");
问题是我无法重定向用户,因为externalsite
会拒绝它,而且我不知道/无法控制secretroom
验证在externalsite
上的工作方式。如果我按照上面的方式进行操作,它只会允许访问。
话虽如此,这真的可能吗?
【问题讨论】:
【参考方案1】:编辑:在更清楚地了解您要完成的工作之后,我不相信您可以做到这一点。特别是因为在您的第一个示例中,您实际上是在向用户浏览器发送响应,该浏览器将他们重定向到目标站点并发送表单参数以进行乘车。然而,以编程方式发布数据是浏览器带外的。这两种方法不可互换。如果您不满意以这种方式发送敏感数据,您很可能需要与网站提供商合作确定替代方法。
原始解决方案
您可以使用 WebRequest 类以编程方式 POST 数据。
WebRequest request = WebRequest.Create("https://externalsite.com/secretroom");
request.Method = "POST";
... rest omitted - refer to link below for specifics ...
https://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.110%29.aspx
此外,您可能需要参考以下 SO 问题,了解有关 WebRequest 类变体(即 HttpWebRequest、FtpWebRequest 等)的详细信息。
C# HttpWebRequest vs WebRequest
【讨论】:
那么如何在 POST 成功后重定向用户?似乎这只能通过使用HttpClient
获得我已经能够获得的响应,但我实际上需要将我的用户重定向到该页面。
@warheat1990 - 您可以像现在在第一个示例中所做的那样简单地做,但将方法设为FormMethod.Get
,然后省略敏感数据。如果您尝试在幕后发布数据并同时转移用户 - 您不能这样做。
你能发布一些代码示例吗?尤其是省略数据部分和重定向。
@warheat1990 - 请参阅我回答中的编辑。在确切地意识到你想要做什么之后,你将无法以你目前使用的方式完成它——或者至少你需要比我更聪明的人的输入,如果有办法的话。
@warheat1990 - 实际上经过更多思考,实际上可能有办法做到这一点。当您使用带有秘密值的标准表单 POST 到该站点时 - 这是否有效地通过该站点对您进行身份验证?如果是这样,那么您可以从 HttpWebRequest 的响应中获取 auth cookie,然后转身将该 cookie 提供给您的正常响应。这会将 auth cookie 传递回您的目标站点,而您无需公开提供敏感数据。参考这个***.com/questions/16380189/…以上是关于是否可以在服务器端执行 POST 到外部 HTTPS url 并将用户重定向到 POST 目标?的主要内容,如果未能解决你的问题,请参考以下文章
PhoneGap Ionic 项目未在 iOS 设备上执行 $http.post
C#小白使用入门,数据库操作,web端文件下载,执行外部程序,操作ini文件