【发布时间】:2010-10-20 21:26:02
【问题描述】:
在this question 浪费了两天时间(并试图让它发挥作用)之后,我决定退后一步,问一个更基本的问题,因为显然有些事情我不知道或者我正在做错误的。
要求很简单,我需要在 C# 中通过 https 发布一个 HTTP 帖子(传递一些值)。
网站(如果给定适当的值)将返回一些简单的 html 和响应代码。 (我稍后会展示这些)。
真的那么简单。 “网络服务”有效。我有一个可以正常工作并成功连接到它的 php 示例。我还有一个也可以工作的 Dephi“演示”应用程序(带有源代码)。最后,我有来自具有“服务”的公司的演示应用程序(二进制),当然也可以。
但我需要通过 C# 来完成。这听起来很简单,但它不起作用。
出于测试目的,我创建了一个简单的控制台应用程序和一个简单的连接方法。我尝试了 7 种不同的方法来创建 HTTP 请求,几乎都是相同的东西,不同的实现(使用 WebClient,使用 HttpWebRequest 等)。
所有方法都有效,除了当 URI 以“https”开头时。
我收到一个网络异常,说远程服务器返回 404。我已经安装了 Fiddler(按照 SO 用户的建议),并调查了一点流量。 404 是因为我传递了一些错误,因为正如我稍后提到的,“服务”有效。稍后我会谈到提琴手的结果。
我必须发布数据的 URL 是:https://servicios.mensario.com/enviomasivo/apip/
这是 POST 数据:(值是假的)
usuario=SomeUser&clave=SomePassword&nserie=01234567890123456789&version=01010000&operacion=220
服务器可能会返回两/三行响应(对不起,西班牙语,但公司来自西班牙)。以下是可能的响应示例:
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 100 BIEN
998
还有一个
HTTP/1.1 200 OK
Content-Type: text/plain
01010000 20 AUTENTIFICACION NEGATIVA
Ha habido un problema en la identificación ante el servidor. Corrija sus datos de autentificacion.
第一个代表OK,第二个代表Auth Failure。
正如您所见,这项任务非常简单,只是它不起作用。如果我使用提琴手,我会看到连接中有某种 SSL 内容,然后一切正常。然而,据我所知,.NET 为我们处理了所有这些事情(是的,我添加了回调以始终验证无效证书)。我不明白我做错了什么。我可以发布/通过电子邮件发送代码,但我想知道的非常简单:
如何使用 C# 和“简单”的 HttpWebRequest 通过 SSL 进行 POST,然后在字符串/数组/任何处理内容中获得响应?
相信我已经用 Google 搜索和 Stackoverflowing 两天了。我没有任何代理。连接通过我的路由器。标准端口。没有什么花哨。我的机器在 VMWare 虚拟机中并且是 Windows Vista,但鉴于示例应用程序(php、delphi、二进制)都可以正常工作,我认为这不是问题)。
如果有人想查看它们,可以使用here 获取不同的样本(无二进制文件)。
如果有任何帮助,我将不胜感激。如果有人想尝试使用“真实”用户名,我有一个演示用户,我可以将用户/通行证传递给您以进行测试。我只有 一个 演示用户(他们给我的那个),这就是我不在这里粘贴它的原因。我不想用测试淹没用户;)
我已经尝试(在示例中)使用 UTF8 和 ASCII,但这并没有改变任何东西。
我 100% 肯定 SSL 与我有关,但我不这样做是因为我不知道。
感谢提前。
马丁。
【问题讨论】:
标签: c# .net ssl post httpwebrequest