这是我试图用来将POST数据发送到URL并带回其响应的方法:

public string sendPOST(string URL, string postData)
{
    byte[] byteArray;
    Stream webpageStream;
    StreamReader webpageReader;
    String webpageContent;

    byteArray = Encoding.UTF8.GetBytes(postData);
    _webRequest = WebRequest.Create(URL);
    _webRequest.Method = "POST";
    _webRequest.ContentType = "application/x-www-form-urlencoded";
    _webRequest.ContentLength = byteArray.Length;

    webpageStream = _webRequest.GetResponse().GetResponseStream();
    webpageStream.Write(byteArray, 0, byteArray.Length);
    webpageStream.Close();

    webpageReader = new StreamReader(webpageStream);

    webpageContent = webpageReader.ReadToEnd();

    return webpageContent;
}

我从MSDN网页上获得了很多这样的代码,所以我知道我大致走在正确的轨道上...但是当我使用以下方法调用该方法时:

string test = webHelper.sendPOST("http://google.com", "var=1");
MessageBox.Show(test);

应用程序刚刚锁定。 我调试了该方法,据我所知,代码运行良好,直到这一行:

webpageStream = _webRequest.GetResponse().GetResponseStream();

我试过在try块中把它包起来但是根本没有抛出任何exeptions。

有没有人有足够的网络请求经验来帮助我?

非常感谢 :)

===============>>#1 票数:12

我意识到这是一个古老的问题但我认为我会提供正确使用using语句的答案,因此无需调用'Close'即可完成连接的关闭。 webrequest也可以在SendPost方法的范围内声明。

public string SendPost(string url, string postData)
{
    string webpageContent = string.Empty;

    try
    {
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.Method = "POST";
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.ContentLength = byteArray.Length;

        using (Stream webpageStream = webRequest.GetRequestStream())
        {
            webpageStream.Write(byteArray, 0, byteArray.Length);
        }

        using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
        {
            using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
            {
                webpageContent = reader.ReadToEnd();
            }
        }
    }
    catch (Exception ex)
    {
        //throw or return an appropriate response/exception
    }

    return webpageContent;
}

这也是以下答案https://stackoverflow.com/a/336420/453798

希望这可以帮助

===============>>#2 票数:9

您的代码中存在逻辑错误:

webpageStream.Close();

webpageReader = new StreamReader(webpageStream);

您正在关闭流,然后尝试从中读取。 一旦流关闭,它实际上已经死了。

更根本的问题是你试图将你的请求写入响应,这不仅是荒谬的,而且也是不可能的! 想要做的是写入请求流,然后得到这样的响应:

webpageStream = _webRequest.GetRequestStream();
webpageStream.Write(byteArray, 0, byteArray.Length);
webpageStream.Close();

webpageReader = new StreamReader(_webRequest.GetResponse().GetResponseStream());

  ask by Wen translate from so

未解决问题?本站智能推荐:

1回复

C#WebRequest无法发布数据的整个长度

我目前有问题。 我正在尝试将数据发布到PHP文档中,但无法获得全部价值。 中间某处停止发布。 有人知道问题所在吗? 字节数组的长度为7401。 那不是很久远的事吗? 我的代码如下:
2回复

C#中的POST请求参数问题

每当用户单击日历以更改日期时, 该网站就会使用POST发送数据。 我用Firebug来检查它。 目标URL是this 。 特定示例的帖子数据(以空格分隔)是LeagueID=9 GameDate=4-29-2011 Season=2010-2011 Refresh=false LastUp
1回复

多个帖子请求同一会话C#

我正在编写一个脚本,该脚本在网站上发布,将商品添加到购物车并结帐。 我设法添加到购物车,但是当我要结帐时,就像购物车中没有东西。 如何使用同一会话将其添加到购物车/结帐? 这是我的代码: 当我执行结帐请求时,它不起作用并获得网站html主页的源代码 非常感谢您的回答
1回复

如何在C#中模拟此发布请求

我需要发送针对我正在制作的应用程序的一系列获取/发布请求(用于在线聊天的自定义包装)。 我通过宽松地模拟从Telerik Fiddler记录的请求来完成站点登录过程和初始聊天加载。 现在,我在处理另一个发布请求时遇到了麻烦,该请求将用户注册为在线。 它是与socket.io服务器的
1回复

使用cookie创建WebRequest并返回HTML C#

我正在尝试登录Amazon Seller Central帐户,然后从订单页面返回HTML(需要登录)。 我的streamreader返回null,所以我的代码一定有问题,否则我的想法有缺陷。 在此代码的第一部分中,在ConsoleReadline()之前。 我用POST输入用户名和密码
6回复

使用C#和WebRequest上传图像?

这是Python(使用cURL)中的工作代码: 这是我在C#中拥有的东西: 现在,我注意到的是,当我将参数字符串中的API密钥更改为“ 239231”或任何数字时,得到的响应是:“无效的API密钥”。 因此,我认为某些工作必须正确。 我放置了正确的 API密钥,现在得到一
2回复

c#如何以这种方式发送HTTP命令-http://192.168.10.1/api/control?alert=101002

我有Patlite的硬件 ,该硬件具有HTTP命令控制功能,例如,如果将URL“ http://192.168.10.1/api/control?alert=101002 ”复制到计算机中的chrome,它将激活所需的硬件。 我想从我的代码中发送命令。 我没有运气尝试了这段代码:
2回复

C#API调用不适用于HttpWebRequest,但可以与Postman一起使用

我有以下邮递员要求: 这会使我返回预期的URL: 我试图用.Net Core 2.0应用程序模仿这个操作,代码如下: 但是我收到了500个错误。 我错过了什么?
1回复

使用多部分/表单数据登录网站

我一直在尝试使用WebRequest顺利登录网站,但希望有人能帮到我。 登录页面使用“ multipart / form-data; boundary”作为其发布数据,这是我之前从未遇到过的,并且我无法使其正常运行。 成功的帖子如下所示(由Tamper提供): 我的连接方法如下所
1回复

用于Assembla API POST请求的3步OATH 2.0身份验证返回“错误请求”

我正在尝试创建一种与Assembla API进行通信的工具,但是我无法正确地进行身份验证。 我正在使用此处描述的3步骤过程。 尽管我确实希望将来使它变得更智能,但现在检索PIN码没有问题。 我无法将PIN码交换为不记名令牌。 我的代码是这样的: 这导致webrequest异常