C# 基本POST HttpWebRequest发送失败,但在浏览器中工作

C# 基本POST HttpWebRequest发送失败,但在浏览器中工作,c#,http,httpwebrequest,httpwebresponse,C#,Http,Httpwebrequest,Httpwebresponse,编辑:我也尝试过使用HttpRequest,遇到了类似的错误,但现在我也发现它可以与curl一起使用。我想知道我的.NET中的某些配置是否有问题?我甚至不知道从哪里开始寻找 我试图写一篇非常简单的文章,但是我收到了WebException 基础连接已关闭:上发生意外错误 一封信 我对这类工作不太熟悉,也没有什么想法,所以任何建议都将不胜感激 我已添加了所有标题,并尝试调整ServicePointManager.MaxServicePointIdleTime和KeepAlive。这个特定的请求应该

编辑:我也尝试过使用HttpRequest,遇到了类似的错误,但现在我也发现它可以与curl一起使用。我想知道我的.NET中的某些配置是否有问题?我甚至不知道从哪里开始寻找

我试图写一篇非常简单的文章,但是我收到了WebException

基础连接已关闭:上发生意外错误 一封信

我对这类工作不太熟悉,也没有什么想法,所以任何建议都将不胜感激

我已添加了所有标题,并尝试调整ServicePointManager.MaxServicePointIdleTime和KeepAlive。这个特定的请求应该有一个空的主体,但我也尝试了对同一站点的其他URL使用非空主体的请求

我可以使用此处演示的方法通过浏览器成功发送帖子:

下面是我如何尝试使用此模板发送HttpWebRequest(我从基础开始,然后一直添加浏览器请求中的标题):


但是我仍然没有看到你的字节数组被填充。你正在写一篇博文,这意味着你想在某处发布一些数据。数据在哪里?我想没有。我也没有在javascript版本中添加任何数据。该站点似乎是这样设计的:GET请求返回导航错误页面,而POST返回json对象的文本,该文本通常会在javascript脚本中使用,然后放入html表并显示。所以它需要一个POST请求,但在这种情况下,没有数据可以随它一起发送。我试着抓取html,但是WebBrowser遇到了一些问题,当我注意到我可以直接抓取json时,这似乎会更容易。
var formPost = document.createElement('form');
formPost.method = 'POST';
formPost.action = 'https://vulcun.com/api/games';
document.body.appendChild(formPost);
formPost.submit();
using System;
using System.Net;
using System.IO;
namespace Scraper{
    class MainClass{
        public static void Main (string[] args){
            try{
                //ServicePointManager.MaxServicePointIdleTime = 15;
                HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("https://vulcun.com/api/games");
                //rq.KeepAlive = false;
                byte[] byteArray = { };
                rq.Host = "vulcun.com";
                rq.Method = "POST";
                rq.ContentLength = byteArray.Length;
                rq.ContentType = "application/x-www-form-urlencoded";
                rq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                rq.Headers.Add("Accept-Encoding","gzip, deflate");
                rq.Headers.Add("Accept-Language", "en-US,en;q=0.5");


                Stream dataStream = rq.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                HttpWebResponse resp = (HttpWebResponse)rq.GetResponse();


            }
            catch(WebException e){
                Console.WriteLine("Message: " + e.Message);
                if (e.Status == WebExceptionStatus.ProtocolError){
                    Console.WriteLine("Status Code: {0}", ((HttpWebResponse)e.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                }
            }
            catch(Exception e){
                Console.WriteLine(e.Message);
            }

            Console.ReadLine();
        }

    }
}