c# - El servidor ha ocasionado una violación del protocolo. Section=ResponseStatusLine cuando se usa un proxy tor
asp.net httpwebrequest (2)
Puede obtener más detalles acerca de la excepción que está obteniendo, que en realidad es una Excepción Web, al observar la propiedad Response
de la excepción y luego verificar las propiedades StatusDescription
y StatusCode
. Eso lo ayudará a obtener más detalles sobre el error y, con un poco de suerte, le orientará en la dirección correcta.
Algo como esto:
catch(WebException e)
{
if(e.Status == WebExceptionStatus.ProtocolError)
{
Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
}
}
Además, eche un vistazo al ejemplo de WebException.Status en MSDN para obtener más detalles
Estoy tratando de enviar una httpwebrequest usando un proxy tor con mi aplicación asp.net y recibo este mensaje de error cuando llamo al método webresponse.GetResponse ():
El servidor ha ocasionado una violación del protocolo. Sección = ResponseStatusLine
Intenté buscar una solución en la web y encontré 3 soluciones principales para este error:
Agregar a Web.config.
<system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true"/> </settings> </system.net>`
Agregue la línea:
webRequest.ProtocolVersion = HttpVersion.Version10;
al código- Agregue la
request.ServicePoint.Expect100Continue = false;
derequest.ServicePoint.Expect100Continue = false;
al código
Cada una de las soluciones enumeradas no cambió nada sobre el mensaje de error.
Aquí está el código de solicitud:
WebRequest.DefaultWebProxy = new WebRequest("127.0.0.1:9051");
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.CookieContainer = new CookieContainer();
webRequest.ProtocolVersion = HttpVersion.Version10;
webRequest.KeepAlive = false;
webRequest.Method = "GET";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19";
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream());
string html = streamReader.ReadToEnd();
webResponse.Close();
return html;
¿Alguien puede ayudarme a encontrar una solución para esto?
Yo tuve el mismo problema. El método httpwebrequest getresponse siempre devuelve el protocolo de error vialotion y resuelvo el problema de esta manera;
en primer lugar, uso el objeto xml com en lugar de xdocument o xmldocument.
este objeto com tiene algunas versiones Microsft XML, v3.0-v5.0-v6.0. utilicé v6.0.
MSXML2.DOMDocument60Class doc = new MSXML2.DOMDocument60Class();
doc.setProperty("ServerHTTPRequest",true);
doc.setProperty("ProhibitDTD", false);
doc.async = false;
doc.load(extURL);
if (doc.parseError.errorCode != 0)
{
// error
}
else
{
// do stuff
}