gpt4 book ai didi

c# - 通过 https 从 C# 使用 POST 发布

转载 作者:可可西里 更新时间:2023-11-01 08:43:20 25 4
gpt4 key购买 nike

this question 上浪费了两天时间(并试图让它发挥作用)之后,我决定退后一步,问一个更基本的问题,因为显然有些事情我不知道或者我做错了。

要求很简单,我需要通过 https 从 C# 生成一个 HTTP post(传递一些值)。

网站(如果给定适当的值)将返回一些简单的 html 和响应代码。 (我稍后会展示这些)。

真的就是简单。 “网络服务”有效。我有一个可以运行并成功连接到它的 php 示例。我还有一个 Dephi“演示”应用程序(带有源代码)也可以使用。最后,我从拥有“服务”的公司获得了演示应用程序(二进制),当然它也可以工作。

但我需要通过 C# 来完成。这听起来很简单,但行不通。

出于测试目的,我创建了一个简单的控制台应用程序和一个简单的连接方法。我已经尝试了 7 种不同的方法来创建 HTTP 请求,它们或多或少都是相同的东西,不同的实现(使用 WebClient、使用 HttpWebRequest 等)。

每种方法都有效,除非 URI 以“https”开头。

我收到一个 webexception,说远程服务器返回 404。我已经安装了 Fiddler(按照 SO 用户的建议),并调查了一些流量。 404 是因为我传递了错误的东西,因为正如我稍后提到的,“服务”有效。稍后我将讨论 fiddler 结果。

我必须发布数据的 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。

如您所见,任务很简单,只是行不通。如果我使用 fiddler,我会看到连接中正在进行某种 SSL 操作,然后一切正常。然而,据我所知,.NET 为我们处理所有这些事情(是的,我添加了回调以始终验证无效证书)。我不明白我做错了什么。我可以发布/通过电子邮件发送代码,但我想知道的很简单:

如何使用 C# 和“简单的”HttpWebRequest 通过 SSL 进行 POST,然后在字符串/数组/任何内容中获得响应以进行处理?

请相信我,我已经用谷歌搜索和 Stackoverflowing 搜索了两天。我没有任何代理。连接通过我的路由器。标准端口。没有什么花哨。我的机器位于 VMWare 虚拟机中并且是 Windows Vista,但鉴于示例应用程序(php、delphi、二进制)都可以正常工作,我不认为这是一个问题。

如果有人想看一下不同的样本(没有二进制文件),可以在 here 上找到它们。

如果有任何帮助,我将不胜感激。如果有人想尝试使用“真实”用户名,我有一个演示用户,我可以将用户/密码传递给您以供测试。我只有 一个 演示用户(他们给我的那个),这就是为什么我不把它粘贴在这里的原因。我不想用测试淹没用户 ;)

我已经尝试(在示例中)使用 UTF8 和 ASCII,但这并没有改变任何东西。

我 100% 肯定我必须与 SSL 做一些事情,但我没有这样做是因为我不知道它。

在此提前致谢。

马丁。

最佳答案

我之前曾遇到过完全相同的问题(尽管是在紧凑的框架中)。这是我的问题和我自己的回答: Asynchronous WebRequest with POST-parameters in .NET Compact Framework

我的版本是异步的,所以它比您正在寻找的要复杂一些,但这个想法仍然存在。

private string sendRequest(string url, string method, string postdata) {
WebRequest rqst = HttpWebRequest.Create(url);

// only needed, if you use HTTP AUTH
//CredentialCache creds = new CredentialCache();
//creds.Add(new Uri(url), "Basic", new NetworkCredential(this.Uname, this.Pwd));
//rqst.Credentials = creds;
rqst.Method = method;
if (!String.IsNullOrEmpty(postdata)) {
//rqst.ContentType = "application/xml";
rqst.ContentType = "application/x-www-form-urlencoded";

byte[] byteData = UTF8Encoding.UTF8.GetBytes(postdata);
rqst.ContentLength = byteData.Length;
using (Stream postStream = rqst.GetRequestStream()) {
postStream.Write(byteData, 0, byteData.Length);
postStream.Close();
}
}
((HttpWebRequest)rqst).KeepAlive = false;
StreamReader rsps = new StreamReader(rqst.GetResponse().GetResponseStream());
string strRsps = rsps.ReadToEnd();
return strRsps;

}

关于c# - 通过 https 从 C# 使用 POST 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com