【发布时间】:2014-09-17 02:12:27
【问题描述】:
首先,网站和帖子。
https://saplic.receita.pb.gov.br/sintegra/SINf_ConsultaSintegra.jsp 具有值的 Fullfil 字段 CNPJ 例如 34151100004209。
在 Chrome 和 .Net 4.0 Httpwebrequest 中运行良好。但我无法在提琴手中调试,也无法使其在 .Net 3.5 上运行
我已经在用了
System.Net.ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(customXertificateValidation);
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;
System.Net.ServicePointManager.Expect100Continue = false;
这让我发疯了。任何帮助将不胜感激 为了让事情更清楚,我有一个问题发生在 2 个不同的地方(Fiddler 和 .net 3.5)
我要运行的代码是。
CookieContainer CookCon = new CookieContainer();
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("http://sintegra.receita.pb.gov.br/sintegra/sintegra.asp?estado=pb");
Request.Timeout = Configuration.TimeOut;
Request.Proxy = Configuration.Proxy;
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36";
Request.Headers.Add("Accept-Encoding", "gzip, deflate");
Request.CookieContainer = new CookieContainer();
using (HttpWebResponse Response = Request.GetResponse() as HttpWebResponse)
{
foreach (Cookie C in Response.Cookies)
{
CookCon.Add(C);
}
Response.Close();
}
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://saplic.receita.pb.gov.br/sintegra/");
Request.Referer = "http://sintegra.receita.pb.gov.br/sintegra/sintegra.asp?estado=pb";
Request.Headers.Add("X-DevTools-Emulate-Network-Conditions-Client-Id", "C5E5561B-11F5-4D9E-A9D4-54A18E660D11");
Request.CookieContainer = CookCon;
Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.103 Safari/537.36";
string HTML = "";
string Encoding = "ISO-8859-1";
Request.Timeout = 20000;
Request.Headers.Add("Accept-Encoding", "gzip, deflate");
using (HttpWebResponse Response = Request.GetResponse() as HttpWebResponse)
{
Stream S = Response.GetResponseStream();
if (Response.ContentEncoding.ToLower().Contains("gzip"))
{
S = new GZipStream(S, CompressionMode.Decompress);
using (System.IO.StreamReader ResStream = new StreamReader(S, System.Text.Encoding.GetEncoding(Encoding)))
{
HTML = ResStream.ReadToEnd();
ResStream.Close();
}
}
else if (Response.ContentEncoding.ToLower().Contains("deflate"))
{
S = new DeflateStream(S, CompressionMode.Decompress);
using (System.IO.StreamReader ResStream = new StreamReader(S, System.Text.Encoding.GetEncoding(Encoding)))
{
HTML = ResStream.ReadToEnd();
ResStream.Close();
}
}
else
{
using (System.IO.StreamReader ResStream = new StreamReader(Response.GetResponseStream(), System.Text.Encoding.GetEncoding(Encoding)))
{
HTML = ResStream.ReadToEnd();
ResStream.Close();
}
}
S.Close();
S.Dispose();
Response.Close();
}
当我尝试发布帖子时,我得到的错误是“unexpeted EOF”异常(上面代码的 GetResponse 部分)。 如果我尝试在打开 Fiddler 的情况下在 Chrome 上浏览该网站,它不会返回北向,只是保持等待、等待、等待,什么都没有。
如果我将相同的代码复制到一个新的 4.0 项目中,它可以毫无问题地运行。 如果不清楚,请发表疑问,我试图尽可能清楚。
【问题讨论】:
-
如果它适用于 .NET 4,但不适用于 3.5,可能是因为您的 SSL 证书具有主题备用名称(SAN,也称为“DNS 名称”)。 .NET 3.5 并非在所有情况下都处理 SAN。
-
没有workaournd吗?试图用谷歌搜索这个 SAN 的东西,但没有任何有趣的东西。你能解释一下吗?