4 Stimmen

getResponse in c# funktioniert nicht. Es kommt keine Antwort zurück

Ich habe diesen Code in 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();

Die Linie HttpWebResponse wResp =... bleibt einfach hängen (keine Antwort von der URL). Ich bin nicht sicher, wo genau seine Absturz (weil ich nicht einmal eine Ausnahmefehler erhalten). Ich testete die URL in IE und es funktioniert gut. Ich überprüfte auch die bPostData und das hat Daten in ihm. Wo ist es schief gehen?

3voto

usr Punkte 164863

Versuchen Sie, den Anforderungsstrom in der Variablen newStream zu schließen. Möglicherweise wartet die API darauf, dass sie beendet wird.

1voto

Sie müssen den Grenzwert erhöhen:

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

0voto

Darin Dimitrov Punkte 990883

Versuchen Sie, Ihren Code zu vereinfachen und einen Benutzeragenten vorzutäuschen. Vielleicht blockiert oder drosselt die Website Scraper/Bots. Stellen Sie außerdem sicher, dass Ihre application/x-www-form-urlencoded HTTP POST-Werte sind richtig kodiert. Dazu würde ich Ihnen empfehlen 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);
}

0voto

Cos Callis Punkte 4995

Als ich vorhin einen Kommentar abgab, hatte ich Ihren Code in meinem Büro (mit starker Firewall) ausgeführt und das gleiche Ergebnis wie Sie erhalten. Als ich nach Hause kam, versuchte ich es erneut (mit weniger Firewalls) und es funktionierte gut... Ich vermute, dass Sie dort eine Barriere haben. Ich glaube, Sie haben ein Problem mit der Firewall.

0voto

Verwenden Sie eine content-length=0

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X