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,其中有数据。哪里出了问题?
尝试关闭变量 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();