C# 中的 getResponse 不起作用.没有回复

本文关键字:回复 不起作用 中的 getResponse | 更新日期: 2023-09-27 17:57:19

我在 C# 中有这段代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = 30000; 
request.Method = "POST"; 
request.KeepAlive = true;
request.AllowAutoRedirect = false;
Stream newStream = request.GetRequestStream();
newStream.Write(bPostData, 0, bPostData.Length);
byte[] buf = new byte[1025]; int read = 0; string sResp = "";
HttpWebResponse wResp = (HttpWebResponse)request.GetResponse();
Stream resp = wResp.GetResponseStream();

该行HttpWebResponse wResp =...只是挂起(因为 URL 没有响应)。我不确定它到底在哪里崩溃(因为我什至没有收到异常错误)。我在IE中测试了URL,它工作正常。我还检查了bPostData,其中有数据。哪里出了问题?

C# 中的 getResponse 不起作用.没有回复

尝试关闭变量 newStream 中的请求流。也许 API 正在等待它完成。

您必须增加限制:

ServicePointManager.DefaultConnectionLimit = 10; // Max number of requests

尝试简化代码并伪造用户代理。也许该网站正在阻止/限制抓取工具/机器人。还要确保application/x-www-form-urlencoded HTTP POST 值已正确编码。为此,我建议您使用WebClient:

using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
    var values = new NameValueCollection
    {
        { "param1", "value1" },
        { "param2", "value2" },
    };
    byte[] result = client.UploadValues(url, values);
}

当我之前评论时,我在办公室运行了您的代码(防火墙严密),我得到了与您相同的结果。回到家,再试一次(防火墙较少),它工作正常......我猜你那里有障碍。我相信您正面临防火墙问题。

使用内容长度=0

例:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
        request.Method = "POST";
        request.ContentLength = 0;
        var requestStream = request.GetRequestStream();
        HttpWebResponse res = (HttpWebResponse)request.GetResponse();
        res.Close();