使用C#使用默认浏览器发送HTTP Post请求

6
我想知道在C#中是否可能使用计算机的默认浏览器发送POST数据。
情况如下:我的客户希望他们的C#应用程序能够打开浏览器并将客户信息发送到一个Web表单。这个Web表单会在登录屏幕后面。应用程序方面的假设是,一旦客户端数据被发送到登录屏幕,登录屏幕就会将该信息传递给Web表单以进行预填充。这将通过HTTPS完成,客户端希望使用POST而不是GET进行操作,因为客户信息将作为纯文本发送。
我已经找到了一些很好的解决方案,可以执行POST并处理请求。例如:http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx 所以简而言之:
1)打开浏览器
2)使用POST数据打开某个URL
谢谢您的帮助,
Paul

@John,什么样的病毒会想要这样做?如果我在编写病毒,我最不想做的事情就是在明文中POST数据,因为我可以通过简单的后台方式轻松完成。 - Brad
@Brad,它不是病毒,但肯定会成为一个安全漏洞。 - Steven Sudit
一款流氓应用程序会在假定某人的现有会话的情况下提交某些内容。 - John Sheehan
@John,我不认为他在问那个,是吗?我的理解是,程序进行了POST请求,然后提示用户登录,启动会话,然后稍后验证该POST数据。就像我在网站上点击受保护的区域并被发送到登录页面,只有在登录后才能重定向到我要去的地方。或者我误解了吗? - Brad
@Brad。这正是我想做的事情。发布的数据用于预填用户将看到的表单。然后他们将提交它,Web应用程序将验证数据。唯一的问题是该表单位于登录屏幕后面。 - Paul
@Paul,这完全取决于服务器端发生了什么。否则,是的,你确实劫持了浏览器会话。如果在服务器端,表单数据可以在用户登录时保留,然后预填充,那么我发布的内容就可以正常工作。 - Brad
4个回答

5

我曾经处理过一个类似的情况,方法是动态生成一个HTML页面,并在其中设置一个包含隐藏值的表单。页面上还有一些Javascript代码,使得页面加载时会自动提交表单,从而实现必要的数据提交。

我认为这个方法也适用于你的情况。

  1. 生成一个字段和值的字典
  2. 生成一个带有自动提交Javascript的HTML页面
  3. 将页面写入临时磁盘位置
  4. 使用默认浏览器打开该页面

但请记住,POST数据也以明文形式发送。对于超过几个字段的情况,POST通常是更好的选择,因为它可以容纳更多数据(URL的2048字节限制)并且用户可以看到友好的URL。


0

使用SSL时,没有任何内容以纯文本形式发送,它都是加密的。除非您设置默认浏览器(IE、Firefox、Chrome等),否则您将不得不找出默认浏览器并使用其API来完成此工作(如果可能的话)。

可能更快、更有效的方法是通过调用URL打开默认浏览器,并在查询字符串中传递信息(这是执行GET而不是POST,我知道这不是您要求的内容)。

服务器的响应可以是重定向,重定向可以发送填好的表单(将值存储在会话或类似的东西中)。

这样复杂性就被推到了网站上,而不是Windows应用程序上,如果出现问题,更新应该更容易。

希望对您有所帮助。


是的,我相信这就是意图(抱歉,一些细节正在整理中,我正在解决后勤问题)。所以一旦数据被发送到任何页面,登录/网络表单等,我就不需要担心了。这个页面会为我完成工作。我想下一个问题是,如果它是通过HTTPS传输的,我们是否真的需要担心它是GET还是POST?客户端数据在查询字符串中是否重要? - Paul
@Paul:除非你担心最终用户轻易地看到数据,否则不需要这样做。 - Steven Sudit
@Steven Sudit。感谢您的帮助。我并不担心,因为他们将在原始应用程序中看到这些信息。基本上,他们想要将其分解为以下步骤。1)在原始应用程序中查看数据2)按下按钮3)将数据发送到Web应用程序。我相信我已经有足够的信息了。谢谢! - Paul

0

-1

URL末尾的任何内容都被视为查询字符串,这就是GET填充的内容。它比POST请求中的数据更容易被看到,但在嗅探方面并不更安全。

因此,简而言之,答案是否定的。


他确实提到了帖子将通过HTTPS进行。 - RubbleFord
@Paul:如果你可以看到通过网络传输的内容,那么POST数据也同样可见。如果由于HTTPS而无法查看,则它也是不可见的。真正的区别在于用户可以在URL中看到它。 - Steven Sudit
1
起初阅读时,我认为POST是端点的要求,但再次阅读后,我发现它可以被解释为他认为POST更安全,从而使您的答案相关。 - John Sheehan
只有在使用SSL时,POST才更安全。 - Robert Levy
1
@Robert:使用SSL,每个字节都是加密的;没有任何明文传输。请参阅http://answers.google.com/answers/threadview/id/758002.html。 - Steven Sudit
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接