基本的POST HttpWebRequest无法发送,但可以在浏览器中使用

时间:2015-06-11 21:29:39

标签: c# http httpwebrequest httpwebresponse

编辑:我也尝试过使用HttpRequest并遇到类似的错误,但我现在也发现它适用于curl。我想知道我的.NET中的某些配置是否有问题?我不知道从哪里开始看。但

我正在尝试进行一个非常简单的POST,但是我收到了WebException

  

基础连接已关闭:发生意外错误   发送。

我对这类工作不是很熟悉,而且我没有想法,所以任何建议都会受到赞赏。

我添加了所有标头,并尝试调整ServicePointManager.MaxServicePointIdleTime和KeepAlive。这个特殊的请求应该有一个空的主体,但是我也尝试过对同一站点的其他URL不为空的主体的请求。

我可以使用此处演示的方法使用浏览器成功发送POST:https://stackoverflow.com/a/11886281/3747260

var formPost = document.createElement('form');
formPost.method = 'POST';
formPost.action = 'https://vulcun.com/api/games';
document.body.appendChild(formPost);
formPost.submit();

以下是我尝试使用此模板发送HttpWebRequest的方法(我从基础知识开始,然后继续添加浏览器请求中的标题):https://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.110).aspx

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();
        }

    }
}

0 个答案:

没有答案